1 changed files with 68 additions and 0 deletions
@ -0,0 +1,68 @@ |
|||||||
|
= 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) |
||||||
|
} |
||||||
|
---- |
||||||
|
====== |
||||||
Loading…
Reference in new issue