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

How do I enable multiple client ids in a Spring Boot OAuth2 Server?

我有 Spring 启动 OAuth2 服务器工作,但现在我们需要区分来自不同部门的不同客户端,并根据部门提供不同的功能。我想我可以通过客户端 ID 将它分开。本指南展示了如何使用单个客户端 ID 设置 OAuth2 服务器,但如何使用多个客户端 ID 设置它?

https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_authserver

然后,当发出 API 请求时,我如何找出它是哪个客户端 ID?

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

https://www.baeldung.com/spring-security-oauth-dynamic-client-registration

您可以使用 client_id 和 client_secret 的不同组合在 table oauth_client_details 中创建多个条目。 client_secret显然会被加密。

现在要生成刷新和访问令牌,点击 url /oauth/tokenAuthorization : Basic base64-encoded

其中base64-encoded将是client_id:client_secret的Base64加密。 请记住,这里的client_secret应该是原始明文密码(未加密)。

使用 Spring xml 配置(以较旧的方式)可以实现与

相同的效果
<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>