如何在Spring Boot OAuth2服务器中启用多个客户端ID?

如何在Spring Boot OAuth2服务器中启用多个客户端ID?,spring,spring-boot,spring-security-oauth2,spring-oauth2,Spring,Spring Boot,Spring Security Oauth2,Spring Oauth2,我的Spring Boot OAuth2服务器正在工作,但现在我们需要区分来自不同部门的不同客户机,并根据部门提供不同的功能。我想我可以用客户机id来分隔它。本指南展示了如何使用单个客户机id设置OAuth2服务器,但是如何使用多个客户机id来设置它 然后,当发出API请求时,如何确定它是哪个客户端id?您需要的是动态客户端注册,如下所示: 您可以在表oauth\u client\u details中创建多个条目,使用不同的client\u id和client\u secret组合。客户机的秘

我的Spring Boot OAuth2服务器正在工作,但现在我们需要区分来自不同部门的不同客户机,并根据部门提供不同的功能。我想我可以用客户机id来分隔它。本指南展示了如何使用单个客户机id设置OAuth2服务器,但是如何使用多个客户机id来设置它


然后,当发出API请求时,如何确定它是哪个客户端id?

您需要的是动态客户端注册,如下所示:


您可以在表oauth\u client\u details中创建多个条目,使用不同的client\u id和client\u secret组合。客户机的秘密显然将被加密

现在要生成刷新和访问令牌,点击url
/oauth/token
带有
授权:基本base64编码

其中base64编码将是
客户机id:client\u secret
的base64加密。 记住,这里的客户机密码应该是原始的普通密码(没有加密)

使用SpringXML配置(以旧的方式)也可以实现同样的效果



我设置了两个静态客户端。我可以这样做吗
clients.jdbc(数据源).withClient(applicationName)…和().withClient(applicationName+“-sales”)
No,我不能这样做。它需要
oauth\u client\u details
表,并将尝试向数据库中插入两行,下次运行时,它将尝试重新插入它们,从而导致重复密钥冲突。谁知道它会将客户端ID插入数据库?我认为它只会将它们(客户机id/secret)存储在内存中,而将令牌存储在DB中。我将
java.security.Principal
注入请求签名,然后得到请求的客户端id。我不明白为什么这是公认的答案。
<oauth:client client-id="mobile_ios"
        authorized-grant-types="password,refresh_token,implicit" secret="ios_s3cret"
        authorities="ROLE_CLIENT" 
        refresh-token-validity="7776000"
        access-token-validity="300" />

    <oauth:client client-id="mobile_android"
        authorized-grant-types="password,refresh_token,implicit" secret="android_s3cret"
        authorities="ROLE_CLIENT"
        refresh-token-validity="7776000"
        access-token-validity="300" />

    <oauth:client client-id="web_app"
        authorized-grant-types="password,refresh_token,implicit" secret="web_s3cret"
        authorities="ROLE_CLIENT" 
        refresh-token-validity="7776000"
        access-token-validity="30000" />
</oauth:client-details-service>