oauth2.0 必须生成相同的令牌,除非它已过期

ecfdbz9o  于 2023-08-02  发布在  其他
关注(0)|答案(1)|浏览(191)

作为spring authorization server的默认设置,它为每个请求生成唯一的令牌。但要求是,如果先前的令牌仍未过期,则生成same token,如果过期,则必须生成新的令牌。这可能吗

RegisteredClient
                .withId(UUID.randomUUID().toString())
                .clientId("client")
                .clientSecret("{noop}secret")
                .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
                .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
                .clientSettings(ClientSettings.builder()
                        .tokenEndpointAuthenticationSigningAlgorithm(SignatureAlgorithm.RS256)
                        .build())
                .tokenSettings(TokenSettings.builder()
                        .accessTokenFormat(OAuth2TokenFormat.SELF_CONTAINED)
                        .idTokenSignatureAlgorithm(SignatureAlgorithm.RS256)
                        .accessTokenTimeToLive(Duration.ofMinutes(30))
                        .build())
                .scope("read")
                .build();

个字符

xdyibdwo

xdyibdwo1#

在Spring Authorization Server中,为每个请求生成访问令牌是默认行为,并符合OAuth 2.0规范
但是,如果您有一个特定的需求,只要它没有过期,就可以生成相同的令牌,那么您可以实现一个自定义解决方案。
这里有一个方法:
1.创建OAuth2TokenGenerator接口的自定义实现以生成和管理访问令牌。您可以扩展Spring Authorization Server提供的现有DefaultOAuth2TokenGenerator类。
1.在自定义令牌生成器实现中重写generateAccessToken()方法。在此方法中,检查是否有有效(未过期)的访问令牌可用。如果是,则返回现有令牌,而不是生成新令牌。否则,委托给超类(DefaultOAuth2TokenGenerator)以生成新的访问令牌。
1.在Spring应用程序上下文中将自定义令牌生成器配置为OAuth2TokenGenerator的bean。
1.确保OAuth2AuthorizationService使用您的定制令牌生成器,方法是创建一个OAuth2AuthorizationService类型的bean,并返回一个注入了您的定制令牌生成器的DefaultOAuth2AuthorizationService示例。
当然要注意,实现这样的自定义逻辑偏离了标准的OAuth 2.0行为,可能会引入安全风险或违反协议的原则。

相关问题