此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Security 6.4.5spring-doc.cadn.net.cn

身份验证更改

将为您编码不透明的令牌凭证

为了更紧密地遵守 Introspection RFC,Spring Security 的不透明令牌支持将在创建授权标头之前对客户端 ID 和密钥进行编码。 此更改意味着您不再需要自己对客户端 ID 和 secret 进行编码。spring-doc.cadn.net.cn

如果您的客户端 ID 或密钥包含 URL 不安全的字符,则您可以通过执行以下作来为此更改做好准备:spring-doc.cadn.net.cn

替换 的用法introspectionClientCredentials

由于 Spring Security 现在可以为您进行编码,因此将introspectionClientCredentials通过发布以下内容@Bean:spring-doc.cadn.net.cn

@Bean
OpaqueTokenIntrospector introspector() {
	return SpringOpaqueTokenIntrospector.withIntrospectionUri(introspectionUri)
            .clientId(unencodedClientId).clientSecret(unencodedClientSecret).build();
}
@Bean
fun introspector(): OpaqueTokenIntrospector {
    return SpringOpaqueTokenIntrospector.withIntrospectionUri(introspectionUri)
            .clientId(unencodedClientId).clientSecret(unencodedClientSecret).build()
}

以上将是 7.0 中的默认值。spring-doc.cadn.net.cn

如果此设置给您带来麻烦或您暂时无法应用它,您可以使用RestOperationsconstructor 代替:spring-doc.cadn.net.cn

@Bean
OpaqueTokenIntrospector introspector() {
	RestTemplate rest = new RestTemplate();
	rest.addInterceptor(new BasicAuthenticationInterceptor(encodedClientId, encodedClientSecret));
	return new SpringOpaqueTokenIntrospector(introspectionUri, rest);
}
@Bean
fun introspector(): OpaqueTokenIntrospector {
	val rest = RestTemplate()
	rest.addInterceptor(BasicAuthenticationInterceptor(encodedClientId, encodedClientSecret))
	return SpringOpaqueTokenIntrospector(introspectionUri, rest)
}