|
@@ -1,6 +1,87 @@
|
|
|
[[oauth2Client-client-auth-support]]
|
|
|
= Client Authentication Support
|
|
|
|
|
|
+[[oauth2Client-client-credentials-auth]]
|
|
|
+== Client Credentials
|
|
|
+
|
|
|
+=== Authenticate using `client_secret_basic`
|
|
|
+
|
|
|
+Client Authentication with HTTP Basic is supported out of the box and no customization is necessary to enable it.
|
|
|
+The default implementation is provided by `DefaultOAuth2TokenRequestHeadersConverter`.
|
|
|
+
|
|
|
+Given the following Spring Boot properties for an OAuth 2.0 client registration:
|
|
|
+
|
|
|
+[source,yaml]
|
|
|
+----
|
|
|
+spring:
|
|
|
+ security:
|
|
|
+ oauth2:
|
|
|
+ client:
|
|
|
+ registration:
|
|
|
+ okta:
|
|
|
+ client-id: client-id
|
|
|
+ client-secret: client-secret
|
|
|
+ client-authentication-method: client_secret_basic
|
|
|
+ authorization-grant-type: authorization_code
|
|
|
+ ...
|
|
|
+----
|
|
|
+
|
|
|
+The following example shows how to configure `DefaultAuthorizationCodeTokenResponseClient` to disable URL encoding of the client credentials:
|
|
|
+
|
|
|
+[tabs]
|
|
|
+======
|
|
|
+Java::
|
|
|
++
|
|
|
+[source,java,role="primary"]
|
|
|
+----
|
|
|
+DefaultOAuth2TokenRequestHeadersConverter<OAuth2AuthorizationCodeGrantRequest> headersConverter =
|
|
|
+ new DefaultOAuth2TokenRequestHeadersConverter<>();
|
|
|
+headersConverter.setEncodeClientCredentials(false);
|
|
|
+
|
|
|
+OAuth2AuthorizationCodeGrantRequestEntityConverter requestEntityConverter =
|
|
|
+ new OAuth2AuthorizationCodeGrantRequestEntityConverter();
|
|
|
+requestEntityConverter.setHeadersConverter(headersConverter);
|
|
|
+
|
|
|
+DefaultAuthorizationCodeTokenResponseClient tokenResponseClient =
|
|
|
+ new DefaultAuthorizationCodeTokenResponseClient();
|
|
|
+tokenResponseClient.setRequestEntityConverter(requestEntityConverter);
|
|
|
+----
|
|
|
+
|
|
|
+Kotlin::
|
|
|
++
|
|
|
+[source,kotlin,role="secondary"]
|
|
|
+----
|
|
|
+val headersConverter = DefaultOAuth2TokenRequestHeadersConverter<OAuth2AuthorizationCodeGrantRequest>()
|
|
|
+headersConverter.setEncodeClientCredentials(false)
|
|
|
+
|
|
|
+val requestEntityConverter = OAuth2AuthorizationCodeGrantRequestEntityConverter()
|
|
|
+requestEntityConverter.setHeadersConverter(headersConverter)
|
|
|
+
|
|
|
+val tokenResponseClient = DefaultAuthorizationCodeTokenResponseClient()
|
|
|
+tokenResponseClient.setRequestEntityConverter(requestEntityConverter)
|
|
|
+----
|
|
|
+======
|
|
|
+
|
|
|
+=== Authenticate using `client_secret_post`
|
|
|
+
|
|
|
+Client Authentication with client credentials included in the request-body is supported out of the box and no customization is necessary to enable it.
|
|
|
+
|
|
|
+The following Spring Boot properties for an OAuth 2.0 client registration demonstrate the configuration:
|
|
|
+
|
|
|
+[source,yaml]
|
|
|
+----
|
|
|
+spring:
|
|
|
+ security:
|
|
|
+ oauth2:
|
|
|
+ client:
|
|
|
+ registration:
|
|
|
+ okta:
|
|
|
+ client-id: client-id
|
|
|
+ client-secret: client-secret
|
|
|
+ client-authentication-method: client_secret_post
|
|
|
+ authorization-grant-type: authorization_code
|
|
|
+ ...
|
|
|
+----
|
|
|
|
|
|
[[oauth2Client-jwt-bearer-auth]]
|
|
|
== JWT Bearer
|
|
@@ -203,3 +284,28 @@ converter.setJwtClientAssertionCustomizer { context ->
|
|
|
}
|
|
|
----
|
|
|
======
|
|
|
+
|
|
|
+[[oauth2Client-public-auth]]
|
|
|
+== Public Authentication
|
|
|
+
|
|
|
+Public Client Authentication is supported out of the box and no customization is necessary to enable it.
|
|
|
+
|
|
|
+The following Spring Boot properties for an OAuth 2.0 client registration demonstrate the configuration:
|
|
|
+
|
|
|
+[source,yaml]
|
|
|
+----
|
|
|
+spring:
|
|
|
+ security:
|
|
|
+ oauth2:
|
|
|
+ client:
|
|
|
+ registration:
|
|
|
+ okta:
|
|
|
+ client-id: client-id
|
|
|
+ client-authentication-method: none
|
|
|
+ authorization-grant-type: authorization_code
|
|
|
+ ...
|
|
|
+----
|
|
|
+
|
|
|
+[NOTE]
|
|
|
+Public Clients are supported using https://tools.ietf.org/html/rfc7636[Proof Key for Code Exchange] (PKCE).
|
|
|
+PKCE will automatically be used when `client-authentication-method` is set to "none" (`ClientAuthenticationMethod.NONE`).
|