mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-03-01 19:09:08 +00:00
69 lines
2.1 KiB
Plaintext
69 lines
2.1 KiB
Plaintext
|
= Authentication Changes
|
||
|
|
||
|
== Opaque Token Credentials Will Be Encoded For You
|
||
|
|
||
|
In order to comply more closely with the Introspection RFC, Spring Security's opaque token support will encode the client id and secret before creating the authorization header.
|
||
|
This change means you will no longer have to encode the client id and secret yourself.
|
||
|
|
||
|
If your client id or secret contain URL-unsafe characters, then you can prepare yourself for this change by doing the following:
|
||
|
|
||
|
=== Replace Usage of `introspectionClientCredentials`
|
||
|
|
||
|
Since Spring Security can now do the encoding for you, replace xref:servlet/oauth2/resource-server/opaque-token.adoc#oauth2resourceserver-opaque-introspectionuri-dsl[using `introspectionClientCredentials`] with publishing the following `@Bean`:
|
||
|
|
||
|
[tabs]
|
||
|
======
|
||
|
Java::
|
||
|
+
|
||
|
[source,java,role="primary"]
|
||
|
----
|
||
|
@Bean
|
||
|
OpaqueTokenIntrospector introspector() {
|
||
|
return SpringOpaqueTokenIntrospector.withIntrospectionUri(introspectionUri)
|
||
|
.clientId(unencodedClientId).clientSecret(unencodedClientSecret).build();
|
||
|
}
|
||
|
----
|
||
|
|
||
|
Kotlin::
|
||
|
+
|
||
|
[source,kotlin,role="secondary"]
|
||
|
----
|
||
|
@Bean
|
||
|
fun introspector(): OpaqueTokenIntrospector {
|
||
|
return SpringOpaqueTokenIntrospector.withIntrospectionUri(introspectionUri)
|
||
|
.clientId(unencodedClientId).clientSecret(unencodedClientSecret).build()
|
||
|
}
|
||
|
----
|
||
|
======
|
||
|
|
||
|
The above will be the default in 7.0.
|
||
|
|
||
|
If this setting gives you trouble or you cannot apply it for now, you can use the `RestOperations` constructor instead:
|
||
|
|
||
|
[tabs]
|
||
|
======
|
||
|
Java::
|
||
|
+
|
||
|
[source,java,role="primary"]
|
||
|
----
|
||
|
@Bean
|
||
|
OpaqueTokenIntrospector introspector() {
|
||
|
RestTemplate rest = new RestTemplate();
|
||
|
rest.addInterceptor(new BasicAuthenticationInterceptor(encodedClientId, encodedClientSecret));
|
||
|
return new SpringOpaqueTokenIntrospector(introspectionUri, rest);
|
||
|
}
|
||
|
----
|
||
|
|
||
|
Kotlin::
|
||
|
+
|
||
|
[source,kotlin,role="secondary"]
|
||
|
----
|
||
|
@Bean
|
||
|
fun introspector(): OpaqueTokenIntrospector {
|
||
|
val rest = RestTemplate()
|
||
|
rest.addInterceptor(BasicAuthenticationInterceptor(encodedClientId, encodedClientSecret))
|
||
|
return SpringOpaqueTokenIntrospector(introspectionUri, rest)
|
||
|
}
|
||
|
----
|
||
|
======
|