Skip to content

Commit 7260966

Browse files
committed
Add token-exchange to grant_types_supported
Issue gh-1525
1 parent d151568 commit 7260966

File tree

4 files changed

+6
-4
lines changed

4 files changed

+6
-4
lines changed

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/web/OidcProviderConfigurationEndpointFilter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
105105
.grantType(AuthorizationGrantType.CLIENT_CREDENTIALS.getValue())
106106
.grantType(AuthorizationGrantType.REFRESH_TOKEN.getValue())
107107
.grantType(AuthorizationGrantType.DEVICE_CODE.getValue())
108+
// TODO: Replace with constant from spring-security:
109+
.grantType(new AuthorizationGrantType("urn:ietf:params:oauth:grant-type:token-exchange").getValue())
108110
.tokenRevocationEndpoint(asUrl(issuer, authorizationServerSettings.getTokenRevocationEndpoint()))
109111
.tokenRevocationEndpointAuthenticationMethods(clientAuthenticationMethods())
110112
.tokenIntrospectionEndpoint(asUrl(issuer, authorizationServerSettings.getTokenIntrospectionEndpoint()))

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/web/OAuth2AuthorizationServerMetadataEndpointFilter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
101101
.grantType(AuthorizationGrantType.CLIENT_CREDENTIALS.getValue())
102102
.grantType(AuthorizationGrantType.REFRESH_TOKEN.getValue())
103103
.grantType(AuthorizationGrantType.DEVICE_CODE.getValue())
104+
// TODO: Replace with constant from spring-security:
105+
.grantType(new AuthorizationGrantType("urn:ietf:params:oauth:grant-type:token-exchange").getValue())
104106
.tokenRevocationEndpoint(asUrl(issuer, authorizationServerSettings.getTokenRevocationEndpoint()))
105107
.tokenRevocationEndpointAuthenticationMethods(clientAuthenticationMethods())
106108
.tokenIntrospectionEndpoint(asUrl(issuer, authorizationServerSettings.getTokenIntrospectionEndpoint()))

oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/oidc/web/OidcProviderConfigurationEndpointFilterTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import jakarta.servlet.FilterChain;
1919
import jakarta.servlet.http.HttpServletRequest;
2020
import jakarta.servlet.http.HttpServletResponse;
21-
2221
import org.junit.jupiter.api.AfterEach;
2322
import org.junit.jupiter.api.Test;
2423

@@ -126,7 +125,7 @@ public void doFilterWhenConfigurationRequestThenConfigurationResponse() throws E
126125
assertThat(providerConfigurationResponse).contains("\"jwks_uri\":\"https://example.com/oauth2/v1/jwks\"");
127126
assertThat(providerConfigurationResponse).contains("\"scopes_supported\":[\"openid\"]");
128127
assertThat(providerConfigurationResponse).contains("\"response_types_supported\":[\"code\"]");
129-
assertThat(providerConfigurationResponse).contains("\"grant_types_supported\":[\"authorization_code\",\"client_credentials\",\"refresh_token\",\"urn:ietf:params:oauth:grant-type:device_code\"]");
128+
assertThat(providerConfigurationResponse).contains("\"grant_types_supported\":[\"authorization_code\",\"client_credentials\",\"refresh_token\",\"urn:ietf:params:oauth:grant-type:device_code\",\"urn:ietf:params:oauth:grant-type:token-exchange\"]");
130129
assertThat(providerConfigurationResponse).contains("\"revocation_endpoint\":\"https://example.com/oauth2/v1/revoke\"");
131130
assertThat(providerConfigurationResponse).contains("\"revocation_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"client_secret_post\",\"client_secret_jwt\",\"private_key_jwt\"]");
132131
assertThat(providerConfigurationResponse).contains("\"introspection_endpoint\":\"https://example.com/oauth2/v1/introspect\"");

oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/web/OAuth2AuthorizationServerMetadataEndpointFilterTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import jakarta.servlet.FilterChain;
1919
import jakarta.servlet.http.HttpServletRequest;
2020
import jakarta.servlet.http.HttpServletResponse;
21-
2221
import org.junit.jupiter.api.AfterEach;
2322
import org.junit.jupiter.api.Test;
2423

@@ -122,7 +121,7 @@ public void doFilterWhenAuthorizationServerMetadataRequestThenMetadataResponse()
122121
assertThat(authorizationServerMetadataResponse).contains("\"token_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"client_secret_post\",\"client_secret_jwt\",\"private_key_jwt\"]");
123122
assertThat(authorizationServerMetadataResponse).contains("\"jwks_uri\":\"https://example.com/oauth2/v1/jwks\"");
124123
assertThat(authorizationServerMetadataResponse).contains("\"response_types_supported\":[\"code\"]");
125-
assertThat(authorizationServerMetadataResponse).contains("\"grant_types_supported\":[\"authorization_code\",\"client_credentials\",\"refresh_token\",\"urn:ietf:params:oauth:grant-type:device_code\"]");
124+
assertThat(authorizationServerMetadataResponse).contains("\"grant_types_supported\":[\"authorization_code\",\"client_credentials\",\"refresh_token\",\"urn:ietf:params:oauth:grant-type:device_code\",\"urn:ietf:params:oauth:grant-type:token-exchange\"]");
126125
assertThat(authorizationServerMetadataResponse).contains("\"revocation_endpoint\":\"https://example.com/oauth2/v1/revoke\"");
127126
assertThat(authorizationServerMetadataResponse).contains("\"revocation_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"client_secret_post\",\"client_secret_jwt\",\"private_key_jwt\"]");
128127
assertThat(authorizationServerMetadataResponse).contains("\"introspection_endpoint\":\"https://example.com/oauth2/v1/introspect\"");

0 commit comments

Comments
 (0)