【问题标题】:OAuth2RestTemplate authetication issue getting access_deniedOAuth2RestTemplate 身份验证问题被拒绝访问
【发布时间】:2016-03-15 13:00:26
【问题描述】:

通过使用以下 curl 命令,我可以访问令牌并获得以下响应 curl 用户名:password@machinename:11002/appName/oauth/token -d grant_type=password -d username=loginFormUserID -d password=loginFormUserPassword

响应:{ “实体 ID”:9, “实体类型”:“”, "refresh_token" : "eyJhbGciOiJSUzI1NiJ9.", “范围”:“登录”, “expires_in”:3599, “实体名称”:“名称”, “access_token”:“eyJhbGciOiJSUzI1NiJ9.ey”, “token_type”:“持票人” }

如果我将使用 spring OAuth2RestTemplate 我将被拒绝访问,这是我的代码详细信息

    ResourceOwnerPasswordAccessTokenProvider provider = new ResourceOwnerPasswordAccessTokenProvider();
    ResourceOwnerPasswordResourceDetails resource = new ResourceOwnerPasswordResourceDetails();
    resource.setClientAuthenticationScheme(AuthenticationScheme.form);
    resource.setAccessTokenUri("http://machinename:11002/appName/oauth/token");
    resource.setClientId("loginFormUserID");
    resource.setClientSecret("loginFormUserPassword");
    resource.setGrantType("password");
    resource.setUsername("username");
    resource.setPassword("password");
    OAuth2AccessToken accessToken = provider.obtainAccessToken(resource, new DefaultAccessTokenRequest());
    OAuth2RestTemplate restTemplateQ     = new OAuth2RestTemplate(resource, new DefaultOAuth2ClientContext(accessToken));
    System.out.println( restTemplateQ.getAccessToken());

线程“main”中的异常 error="access_denied", error_description="Error requesting access token." 在 org.springframework.security.oauth2.client.token.OAuth2AccessTokenSupport.retrieveToken(OAuth2AccessTokenSupport.java:145) 在 org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider.obtainAccessToken(ResourceOwnerPasswordAccessTokenProvider.java:47) 在 com.copart.g1.seller.middleware.client.RestTemplateTest.main(RestTemplateTest.java:55) 引起:org.springframework.web.client.HttpClientErrorException: 401 Unauthorized 在 org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) 在 org.springframework.security.oauth2.client.token.OAuth2AccessTokenSupport$AccessTokenErrorHandler.handleError(OAuth2AccessTokenSupport.java:244) 在 org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:641) 在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:597) 在 org.springframework.web.client.RestTemplate.execute(RestTemplate.java:565) 在 org.springframework.security.oauth2.client.token.OAuth2AccessTokenSupport.retrieveToken(OAuth2AccessTokenSupport.java:137) ... 2 更多

【问题讨论】:

    标签: java spring spring-security oauth-2.0


    【解决方案1】:

    你需要删除 resource.setClientAuthenticationScheme(AuthenticationScheme.form); 正确的形式是 AuthenticationScheme.header

    ResourceOwnerPasswordResourceDetails 类扩展了 BaseOAuth2ProtectedResourceDetails,如果你看到这个类的值是 AuthenticationScheme.header

    谢谢

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 2019-12-12
      • 1970-01-01
      • 2018-01-06
      • 2023-04-06
      • 2015-07-05
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多