Spring Boot OAuth2授权服务器,错误凭据响应

时间:2017-01-10 14:08:57

标签: spring spring-security spring-security-oauth2 oauth2 spring-oauth2

我正在尝试使用Spring Boot和Spring Security的OAuth2集成设置OAuth2授权服务器。

当我尝试进行身份验证时,我收到一条HTTP状态代码400响应,说:“Bad Credentials”。

您可以在此处找到我的授权服务器和网络安全配置:https://gist.github.com/codecitizen/8d130469d83439f5fca86b1a84733aab

我有UserDetailsServiceClientDetailsService的自定义实现。但它们似乎已正确配置。当我运行以下测试用例时:

            given().
                    formParam("grant_type", "password").
                    formParam("username", user.getUsername()).
                    formParam("password", password).
                    auth().basic(client.getClientId(), client.getClientSecret()).
            when().
                    post("/oauth/token").
            then().extract().asString();

使用RestAssurred,两个服务都被调用。

事件陌生人:当我在IntelliJ上为此表达式设置一个断点并对其进行评估时,它会返回一个正确的JWT令牌,并且身份验证似乎有效。当我再次执行测试方法并完全相同的事情时:{"error":"invalid_grant","error_description":"Bad credentials"}这个响应!不改变代码中的任何内容!

我真的无法弄清问题是什么。任何有Spring Security + OAuth2经验的人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:0)

您确定使用正确的Oauth2授权类型设置了自定义ClientDetails。

如果您手工制作UserDetailsS​​ervice,可能会使用默认授权类型(而不是您所需的password授权类型)配置

  • authorization_code
  • refresh_token

要添加password授权类型,您需要执行以下操作:

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
   InMemoryClientDetailsServiceBuilder clientsBuilder = clients
     .inMemory()
     .withClient("clientid")
     .scopes("openid","read", "write")
     .authorizedGrantTypes("password", "refresh_token", "authorization_code")
     .secret("clientSecret"));
}