|
@@ -31,12 +31,12 @@ import org.springframework.security.oauth2.core.AuthorizationGrantType;
|
|
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
|
|
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
|
|
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponseType;
|
|
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponseType;
|
|
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationServerMetadata;
|
|
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationServerMetadata;
|
|
|
|
+import org.springframework.security.oauth2.server.authorization.context.AuthorizationServerContext;
|
|
import org.springframework.security.oauth2.server.authorization.context.AuthorizationServerContextHolder;
|
|
import org.springframework.security.oauth2.server.authorization.context.AuthorizationServerContextHolder;
|
|
import org.springframework.security.oauth2.server.authorization.http.converter.OAuth2AuthorizationServerMetadataHttpMessageConverter;
|
|
import org.springframework.security.oauth2.server.authorization.http.converter.OAuth2AuthorizationServerMetadataHttpMessageConverter;
|
|
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
|
|
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
|
|
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
|
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
|
import org.springframework.security.web.util.matcher.RequestMatcher;
|
|
import org.springframework.security.web.util.matcher.RequestMatcher;
|
|
-import org.springframework.util.Assert;
|
|
|
|
import org.springframework.web.filter.OncePerRequestFilter;
|
|
import org.springframework.web.filter.OncePerRequestFilter;
|
|
import org.springframework.web.util.UriComponentsBuilder;
|
|
import org.springframework.web.util.UriComponentsBuilder;
|
|
|
|
|
|
@@ -55,20 +55,12 @@ public final class OAuth2AuthorizationServerMetadataEndpointFilter extends OnceP
|
|
*/
|
|
*/
|
|
private static final String DEFAULT_OAUTH2_AUTHORIZATION_SERVER_METADATA_ENDPOINT_URI = "/.well-known/oauth-authorization-server";
|
|
private static final String DEFAULT_OAUTH2_AUTHORIZATION_SERVER_METADATA_ENDPOINT_URI = "/.well-known/oauth-authorization-server";
|
|
|
|
|
|
- private final AuthorizationServerSettings authorizationServerSettings;
|
|
|
|
- private final RequestMatcher requestMatcher;
|
|
|
|
|
|
+ private final RequestMatcher requestMatcher = new AntPathRequestMatcher(
|
|
|
|
+ DEFAULT_OAUTH2_AUTHORIZATION_SERVER_METADATA_ENDPOINT_URI,
|
|
|
|
+ HttpMethod.GET.name());
|
|
private final OAuth2AuthorizationServerMetadataHttpMessageConverter authorizationServerMetadataHttpMessageConverter =
|
|
private final OAuth2AuthorizationServerMetadataHttpMessageConverter authorizationServerMetadataHttpMessageConverter =
|
|
new OAuth2AuthorizationServerMetadataHttpMessageConverter();
|
|
new OAuth2AuthorizationServerMetadataHttpMessageConverter();
|
|
|
|
|
|
- public OAuth2AuthorizationServerMetadataEndpointFilter(AuthorizationServerSettings authorizationServerSettings) {
|
|
|
|
- Assert.notNull(authorizationServerSettings, "authorizationServerSettings cannot be null");
|
|
|
|
- this.authorizationServerSettings = authorizationServerSettings;
|
|
|
|
- this.requestMatcher = new AntPathRequestMatcher(
|
|
|
|
- DEFAULT_OAUTH2_AUTHORIZATION_SERVER_METADATA_ENDPOINT_URI,
|
|
|
|
- HttpMethod.GET.name()
|
|
|
|
- );
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
|
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
|
|
throws ServletException, IOException {
|
|
throws ServletException, IOException {
|
|
@@ -78,21 +70,23 @@ public final class OAuth2AuthorizationServerMetadataEndpointFilter extends OnceP
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- String issuer = AuthorizationServerContextHolder.getContext().getIssuer();
|
|
|
|
|
|
+ AuthorizationServerContext authorizationServerContext = AuthorizationServerContextHolder.getContext();
|
|
|
|
+ String issuer = authorizationServerContext.getIssuer();
|
|
|
|
+ AuthorizationServerSettings authorizationServerSettings = authorizationServerContext.getAuthorizationServerSettings();
|
|
|
|
|
|
OAuth2AuthorizationServerMetadata authorizationServerMetadata = OAuth2AuthorizationServerMetadata.builder()
|
|
OAuth2AuthorizationServerMetadata authorizationServerMetadata = OAuth2AuthorizationServerMetadata.builder()
|
|
.issuer(issuer)
|
|
.issuer(issuer)
|
|
- .authorizationEndpoint(asUrl(issuer, this.authorizationServerSettings.getAuthorizationEndpoint()))
|
|
|
|
- .tokenEndpoint(asUrl(issuer, this.authorizationServerSettings.getTokenEndpoint()))
|
|
|
|
|
|
+ .authorizationEndpoint(asUrl(issuer, authorizationServerSettings.getAuthorizationEndpoint()))
|
|
|
|
+ .tokenEndpoint(asUrl(issuer, authorizationServerSettings.getTokenEndpoint()))
|
|
.tokenEndpointAuthenticationMethods(clientAuthenticationMethods())
|
|
.tokenEndpointAuthenticationMethods(clientAuthenticationMethods())
|
|
- .jwkSetUrl(asUrl(issuer, this.authorizationServerSettings.getJwkSetEndpoint()))
|
|
|
|
|
|
+ .jwkSetUrl(asUrl(issuer, authorizationServerSettings.getJwkSetEndpoint()))
|
|
.responseType(OAuth2AuthorizationResponseType.CODE.getValue())
|
|
.responseType(OAuth2AuthorizationResponseType.CODE.getValue())
|
|
.grantType(AuthorizationGrantType.AUTHORIZATION_CODE.getValue())
|
|
.grantType(AuthorizationGrantType.AUTHORIZATION_CODE.getValue())
|
|
.grantType(AuthorizationGrantType.CLIENT_CREDENTIALS.getValue())
|
|
.grantType(AuthorizationGrantType.CLIENT_CREDENTIALS.getValue())
|
|
.grantType(AuthorizationGrantType.REFRESH_TOKEN.getValue())
|
|
.grantType(AuthorizationGrantType.REFRESH_TOKEN.getValue())
|
|
- .tokenRevocationEndpoint(asUrl(issuer, this.authorizationServerSettings.getTokenRevocationEndpoint()))
|
|
|
|
|
|
+ .tokenRevocationEndpoint(asUrl(issuer, authorizationServerSettings.getTokenRevocationEndpoint()))
|
|
.tokenRevocationEndpointAuthenticationMethods(clientAuthenticationMethods())
|
|
.tokenRevocationEndpointAuthenticationMethods(clientAuthenticationMethods())
|
|
- .tokenIntrospectionEndpoint(asUrl(issuer, this.authorizationServerSettings.getTokenIntrospectionEndpoint()))
|
|
|
|
|
|
+ .tokenIntrospectionEndpoint(asUrl(issuer, authorizationServerSettings.getTokenIntrospectionEndpoint()))
|
|
.tokenIntrospectionEndpointAuthenticationMethods(clientAuthenticationMethods())
|
|
.tokenIntrospectionEndpointAuthenticationMethods(clientAuthenticationMethods())
|
|
.codeChallengeMethod("S256")
|
|
.codeChallengeMethod("S256")
|
|
.build();
|
|
.build();
|