15
15
*/
16
16
package org .springframework .security .oauth2 .server .authorization .oidc .web ;
17
17
18
+ import java .util .Arrays ;
19
+ import java .util .HashMap ;
20
+ import java .util .Map ;
21
+
18
22
import javax .servlet .FilterChain ;
19
23
import javax .servlet .http .HttpServletRequest ;
20
24
import javax .servlet .http .HttpServletResponse ;
25
29
import org .springframework .http .MediaType ;
26
30
import org .springframework .mock .web .MockHttpServletRequest ;
27
31
import org .springframework .mock .web .MockHttpServletResponse ;
32
+ import org .springframework .security .oauth2 .core .oidc .http .converter .OidcProviderConfigurationHttpMessageConverter ;
28
33
import org .springframework .security .oauth2 .server .authorization .config .ProviderSettings ;
29
34
import org .springframework .security .oauth2 .server .authorization .context .ProviderContext ;
30
35
import org .springframework .security .oauth2 .server .authorization .context .ProviderContextHolder ;
@@ -56,6 +61,15 @@ public void constructorWhenProviderSettingsNullThenThrowIllegalArgumentException
56
61
.withMessage ("providerSettings cannot be null" );
57
62
}
58
63
64
+ @ Test
65
+ public void setProviderConfigurationHttpMessageConverterWhenNullThenThrowIllegalArgumentException () {
66
+ OidcProviderConfigurationEndpointFilter filter =
67
+ new OidcProviderConfigurationEndpointFilter (ProviderSettings .builder ().build ());
68
+ assertThatIllegalArgumentException ()
69
+ .isThrownBy (() -> filter .setProviderConfigurationHttpMessageConverter (null ))
70
+ .withMessage ("providerConfigurationHttpMessageConverter cannot be null" );
71
+ }
72
+
59
73
@ Test
60
74
public void doFilterWhenNotConfigurationRequestThenNotProcessed () throws Exception {
61
75
OidcProviderConfigurationEndpointFilter filter =
@@ -71,6 +85,55 @@ public void doFilterWhenNotConfigurationRequestThenNotProcessed() throws Excepti
71
85
72
86
verify (filterChain ).doFilter (any (HttpServletRequest .class ), any (HttpServletResponse .class ));
73
87
}
88
+ @ Test
89
+ public void providerConfigurationHttpMessageConverterWhenCustomThenAbleToOverride () throws Exception {
90
+ String issuer = "https://example.com/issuer1" ;
91
+ String authorizationEndpoint = "/oauth2/v1/authorize" ;
92
+ String tokenEndpoint = "/oauth2/v1/token" ;
93
+ String jwkSetEndpoint = "/oauth2/v1/jwks" ;
94
+ String userInfoEndpoint = "/userinfo" ;
95
+
96
+ ProviderSettings providerSettings = ProviderSettings .builder ()
97
+ .issuer (issuer )
98
+ .authorizationEndpoint (authorizationEndpoint )
99
+ .tokenEndpoint (tokenEndpoint )
100
+ .jwkSetEndpoint (jwkSetEndpoint )
101
+ .oidcUserInfoEndpoint (userInfoEndpoint )
102
+ .build ();
103
+ ProviderContextHolder .setProviderContext (new ProviderContext (providerSettings , null ));
104
+ OidcProviderConfigurationEndpointFilter filter =
105
+ new OidcProviderConfigurationEndpointFilter (providerSettings );
106
+
107
+ OidcProviderConfigurationHttpMessageConverter httpMessageConverter = new OidcProviderConfigurationHttpMessageConverter ();
108
+ httpMessageConverter .setProviderConfigurationParametersConverter (oidcProviderConfiguration -> {
109
+ Map <String , Object > claims = new HashMap <>(oidcProviderConfiguration .getClaims ());
110
+ claims .put ("scopes_supported" , Arrays .asList ("openid" , "value1" ));
111
+ return claims ;
112
+ });
113
+ filter .setProviderConfigurationHttpMessageConverter (httpMessageConverter );
114
+ String requestUri = DEFAULT_OIDC_PROVIDER_CONFIGURATION_ENDPOINT_URI ;
115
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , requestUri );
116
+ request .setServletPath (requestUri );
117
+ MockHttpServletResponse response = new MockHttpServletResponse ();
118
+ FilterChain filterChain = mock (FilterChain .class );
119
+ filter .doFilter (request , response , filterChain );
120
+
121
+ verifyNoInteractions (filterChain );
122
+ assertThat (response .getContentType ()).isEqualTo (MediaType .APPLICATION_JSON_VALUE );
123
+ String providerConfigurationResponse = response .getContentAsString ();
124
+ assertThat (providerConfigurationResponse ).contains ("\" issuer\" :\" https://example.com/issuer1\" " );
125
+ assertThat (providerConfigurationResponse ).contains ("\" authorization_endpoint\" :\" https://example.com/issuer1/oauth2/v1/authorize\" " );
126
+ assertThat (providerConfigurationResponse ).contains ("\" token_endpoint\" :\" https://example.com/issuer1/oauth2/v1/token\" " );
127
+ assertThat (providerConfigurationResponse ).contains ("\" jwks_uri\" :\" https://example.com/issuer1/oauth2/v1/jwks\" " );
128
+ assertThat (providerConfigurationResponse ).contains ("\" scopes_supported\" :[\" openid\" ,\" value1\" ]" );
129
+ assertThat (providerConfigurationResponse ).contains ("\" response_types_supported\" :[\" code\" ]" );
130
+ assertThat (providerConfigurationResponse ).contains ("\" grant_types_supported\" :[\" authorization_code\" ,\" client_credentials\" ,\" refresh_token\" ]" );
131
+ assertThat (providerConfigurationResponse ).contains ("\" subject_types_supported\" :[\" public\" ]" );
132
+ assertThat (providerConfigurationResponse ).contains ("\" id_token_signing_alg_values_supported\" :[\" RS256\" ]" );
133
+ assertThat (providerConfigurationResponse ).contains ("\" userinfo_endpoint\" :\" https://example.com/issuer1/userinfo\" " );
134
+ assertThat (providerConfigurationResponse ).contains ("\" token_endpoint_auth_methods_supported\" :[\" client_secret_basic\" ,\" client_secret_post\" ,\" client_secret_jwt\" ,\" private_key_jwt\" ]" );
135
+ }
136
+
74
137
75
138
@ Test
76
139
public void doFilterWhenConfigurationRequestPostThenNotProcessed () throws Exception {
0 commit comments