Spring Security OAuth - 提供程序管理器未针对空资源进行配置
我正在尝试使用Spring Secruity的OAuth API从外部发布的API获取访问令牌。
此 curl 命令有效(其内容是我获取访问令牌所需的全部内容):
curl -X POST \
https://api.app.com/v1/oauth/token \
-H 'content-type: application/x-www-form-urlencoded' \
-d'grant_type=client_credentials&client_id=bcfrtew123&client_secret=Y67493012'
运行此 curl 命令后,能够从外部服务获取访问令牌。
使用Spring Security OAuth API时:
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
设置我的SpringMVC控制器的方法,如下所示:
@RequestMapping(value = "/getAccessToken", method = RequestMethod.POST, consumes="application/x-www-form-urlencoded")
public OAuth2AccessToken getAccessToken(@RequestParam(value="client_id", required=true) String clientId, @RequestParam(value="client_secret", required=true) String clientSecret) throws Exception {
String tokenUri = "https://api.app.com/v1/oauth/token";
ResourceOwnerPasswordResourceDetails resourceDetails = new ResourceOwnerPasswordResourceDetails();
resourceDetails.setAccessTokenUri(tokenUri);
resourceDetails.setClientId(clientId);
resourceDetails.setClientSecret(clientSecret);
resourceDetails.setGrantType("client_credentials");
resourceDetails.setScope(Arrays.asList("read", "write"));
DefaultOAuth2ClientContext clientContext = new DefaultOAuth2ClientContext();
oauth2RestTemplate = new OAuth2RestTemplate(resourceDetails, clientContext);
OAuth2AccessToken token = oauth2RestTemplate.getAccessToken();
return token;
}
当我从本地 tomcat 实例调用 getAccessToken 调用时:
access_denied
error_description=Unable to obtain a new access token for resource 'null'.
The provider manager is not configured to support it.
问题:
- 我在这里错过了什么?是否需要对此进行一些注释?是否存在未设置或需要的属性?
(请注意,内容类型需要为“application/x-www-form-urlencoded”...)
如何使用Spring Security OAuth API模仿工作curl命令?
它可能是我在请求参数中设置的默认值吗?
如果成功,如何对其进行设置,以便在发出任何请求之前始终预加载访问令牌?