Spring Security OAuth2 clientId和clientSecret

时间:2017-04-06 12:37:59

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

我正在评估Spring Security OAuth2实现。我对clientIdclientSecret感到困惑。

我按照https://spring.io/guides/tutorials/spring-security-and-angular-js/构建auth服务器。

我可以通过

生成代码
http://localhost:9999/uaa/oauth/authorize?response_type=code&client_id=acme&redirect_uri=http://example.com

我也可以通过

获取accessstoken
curl acme:acmesecret@localhost:9999/uaa/oauth/token  \
-d grant_type=authorization_code -d client_id=acme     \
-d redirect_uri=http://example.com -d code=jYWioI
{"access_token":"2219199c-966e-4466-8b7e-12bb9038c9bb","token_type":"bearer","refresh_token":"d193caf4-5643-4988-9a4a-1c03c9d657aa","expires_in":43199,"scope":"openid"}

获取访问令牌时,需要clientIdclientSecret

但如果我有多个客户端,我应该启动多个auth服务器吗?它不能以这种方式工作。

如何在没有clientIdclientSecret的情况下构建OAuth2服务器?

代码在这里:https://github.com/yigubigu/spring-security-auth

2 个答案:

答案 0 :(得分:1)

您可以设置可能的客户

Ex In Memory: -

        public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
                .withClient("acme")
                .secret("acmesecret")
                .authorizedGrantTypes("authorization_code", "refresh_token",
                        "password").scopes("openid")
                .and()
                .withClient("xx")
                .secret("xx")
                .authorizedGrantTypes("xxx");
    }

或者您可以为客户端添加数据库记录

参考 - Spring oauth2 DB Schema

答案 1 :(得分:0)

为了实现动态客户端注册,您需要将凭据存储在数据库中,而不是硬编码配置中。

@Override
public void configure(final ClientDetailsServiceConfigurer clients) throws Exception {
    clients.jdbc(dataSource())

    // ...      
}

有关更多信息,请参阅此tutorial