OAuth2 每个客户端有不同的令牌过期时间

Vis*_*hal 1 java spring-security oauth-2.0 spring-security-oauth2

我正在使用spring-security-oauth2来实现我的 OAuth2 授权服务器。spring-security-oauth2 即将消失,我知道我需要将其替换为spring-authorization-server

问题: 不同的客户端是否可以有不同的令牌到期时间(这里客户端代表客户端 ID/客户端秘密对)?

如果是,您能否分享文档/示例代码spring-authorization-server

如果不是,这是 spring-authorization-server 的限制还是 OAuth2 规范不允许?

(澄清一下,我并不是说在 spring-security-oauth2 中这是可能的,如果是的话我也想知道)

Ste*_*erg 7

是的,每个客户端可以有不同的到期时间。您可以使用tokenSettingsof every RegisteredClient,如以下示例所示:

RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString())
                .clientId("messaging-client")
                .clientSecret("{noop}secret")
                .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
                .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
                .authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN)
                .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
                .redirectUri("http://127.0.0.1:8080/login/oauth2/code/messaging-client-oidc")
                .redirectUri("http://127.0.0.1:8080/authorized")
                .scope(OidcScopes.OPENID)
                .scope("message.read")
                .scope("message.write")
                .tokenSettings(TokenSettings.builder()
                        .accessTokenTimeToLive(Duration.ofMinutes(5))
                        .refreshTokenTimeToLive(Duration.ofHours(2))
                        .build())
                .clientSettings(ClientSettings.builder().requireAuthorizationConsent(true).build())
                .build();
Run Code Online (Sandbox Code Playgroud)

有关完整上下文,请参阅示例配置