作为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();
个字符
1条答案
按热度按时间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行为,可能会引入安全风险或违反协议的原则。