1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- = 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)
- }
- ----
- ======
|