44
44
import org .springframework .security .oauth2 .core .OAuth2AccessToken ;
45
45
import org .springframework .security .oauth2 .core .endpoint .OAuth2ParameterNames ;
46
46
import org .springframework .security .oauth2 .jose .TestJwks ;
47
+ import org .springframework .security .oauth2 .server .authorization .InMemoryOAuth2AuthorizationConsentService ;
48
+ import org .springframework .security .oauth2 .server .authorization .InMemoryOAuth2AuthorizationService ;
47
49
import org .springframework .security .oauth2 .server .authorization .JwtEncodingContext ;
50
+ import org .springframework .security .oauth2 .server .authorization .OAuth2AuthorizationConsentService ;
48
51
import org .springframework .security .oauth2 .server .authorization .OAuth2AuthorizationService ;
49
52
import org .springframework .security .oauth2 .server .authorization .OAuth2TokenCustomizer ;
50
53
import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2AccessTokenAuthenticationToken ;
51
54
import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2ClientAuthenticationToken ;
52
55
import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2ClientCredentialsAuthenticationToken ;
56
+ import org .springframework .security .oauth2 .server .authorization .client .InMemoryRegisteredClientRepository ;
53
57
import org .springframework .security .oauth2 .server .authorization .client .RegisteredClient ;
54
58
import org .springframework .security .oauth2 .server .authorization .client .RegisteredClientRepository ;
55
59
import org .springframework .security .oauth2 .server .authorization .client .TestRegisteredClients ;
67
71
import static org .mockito .Mockito .mock ;
68
72
import static org .mockito .Mockito .reset ;
69
73
import static org .mockito .Mockito .verify ;
70
- import static org .mockito .Mockito .verifyNoInteractions ;
71
74
import static org .mockito .Mockito .when ;
72
75
import static org .springframework .test .web .servlet .request .MockMvcRequestBuilders .post ;
73
76
import static org .springframework .test .web .servlet .result .MockMvcResultMatchers .jsonPath ;
80
83
* @author Joe Grandja
81
84
*/
82
85
public class OAuth2ClientCredentialsGrantTests {
83
- private static RegisteredClientRepository registeredClientRepository ;
84
- private static OAuth2AuthorizationService authorizationService ;
85
86
private static JWKSource <SecurityContext > jwkSource ;
86
87
private static OAuth2TokenCustomizer <JwtEncodingContext > jwtCustomizer ;
87
88
private static AuthenticationConverter accessTokenRequestConverter ;
@@ -95,10 +96,11 @@ public class OAuth2ClientCredentialsGrantTests {
95
96
@ Autowired
96
97
private MockMvc mvc ;
97
98
99
+ @ Autowired
100
+ private RegisteredClientRepository registeredClientRepository ;
101
+
98
102
@ BeforeClass
99
103
public static void init () {
100
- registeredClientRepository = mock (RegisteredClientRepository .class );
101
- authorizationService = mock (OAuth2AuthorizationService .class );
102
104
JWKSet jwkSet = new JWKSet (TestJwks .DEFAULT_RSA_JWK );
103
105
jwkSource = (jwkSelector , securityContext ) -> jwkSelector .select (jwkSet );
104
106
jwtCustomizer = mock (OAuth2TokenCustomizer .class );
@@ -112,8 +114,6 @@ public static void init() {
112
114
@ Before
113
115
public void setup () {
114
116
reset (jwtCustomizer );
115
- reset (registeredClientRepository );
116
- reset (authorizationService );
117
117
}
118
118
119
119
@ Test
@@ -123,18 +123,14 @@ public void requestWhenTokenRequestNotAuthenticatedThenUnauthorized() throws Exc
123
123
this .mvc .perform (MockMvcRequestBuilders .post (OAuth2TokenEndpointFilter .DEFAULT_TOKEN_ENDPOINT_URI )
124
124
.param (OAuth2ParameterNames .GRANT_TYPE , AuthorizationGrantType .CLIENT_CREDENTIALS .getValue ()))
125
125
.andExpect (status ().isUnauthorized ());
126
-
127
- verifyNoInteractions (registeredClientRepository );
128
- verifyNoInteractions (authorizationService );
129
126
}
130
127
131
128
@ Test
132
129
public void requestWhenTokenRequestValidThenTokenResponse () throws Exception {
133
130
this .spring .register (AuthorizationServerConfiguration .class ).autowire ();
134
131
135
132
RegisteredClient registeredClient = TestRegisteredClients .registeredClient2 ().build ();
136
- when (registeredClientRepository .findByClientId (eq (registeredClient .getClientId ())))
137
- .thenReturn (registeredClient );
133
+ this .registeredClientRepository .save (registeredClient );
138
134
139
135
this .mvc .perform (post (OAuth2TokenEndpointFilter .DEFAULT_TOKEN_ENDPOINT_URI )
140
136
.param (OAuth2ParameterNames .GRANT_TYPE , AuthorizationGrantType .CLIENT_CREDENTIALS .getValue ())
@@ -146,17 +142,14 @@ public void requestWhenTokenRequestValidThenTokenResponse() throws Exception {
146
142
.andExpect (jsonPath ("$.scope" ).value ("scope1 scope2" ));
147
143
148
144
verify (jwtCustomizer ).customize (any ());
149
- verify (registeredClientRepository ).findByClientId (eq (registeredClient .getClientId ()));
150
- verify (authorizationService ).save (any ());
151
145
}
152
146
153
147
@ Test
154
148
public void requestWhenTokenRequestPostsClientCredentialsThenTokenResponse () throws Exception {
155
149
this .spring .register (AuthorizationServerConfiguration .class ).autowire ();
156
150
157
151
RegisteredClient registeredClient = TestRegisteredClients .registeredClient2 ().build ();
158
- when (registeredClientRepository .findByClientId (eq (registeredClient .getClientId ())))
159
- .thenReturn (registeredClient );
152
+ this .registeredClientRepository .save (registeredClient );
160
153
161
154
this .mvc .perform (post (OAuth2TokenEndpointFilter .DEFAULT_TOKEN_ENDPOINT_URI )
162
155
.param (OAuth2ParameterNames .GRANT_TYPE , AuthorizationGrantType .CLIENT_CREDENTIALS .getValue ())
@@ -168,17 +161,14 @@ public void requestWhenTokenRequestPostsClientCredentialsThenTokenResponse() thr
168
161
.andExpect (jsonPath ("$.scope" ).value ("scope1 scope2" ));
169
162
170
163
verify (jwtCustomizer ).customize (any ());
171
- verify (registeredClientRepository ).findByClientId (eq (registeredClient .getClientId ()));
172
- verify (authorizationService ).save (any ());
173
164
}
174
165
175
166
@ Test
176
167
public void requestWhenTokenEndpointCustomizedThenUsed () throws Exception {
177
168
this .spring .register (AuthorizationServerConfigurationCustomTokenEndpoint .class ).autowire ();
178
169
179
170
RegisteredClient registeredClient = TestRegisteredClients .registeredClient2 ().build ();
180
- when (registeredClientRepository .findByClientId (eq (registeredClient .getClientId ())))
181
- .thenReturn (registeredClient );
171
+ this .registeredClientRepository .save (registeredClient );
182
172
183
173
OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken (registeredClient );
184
174
OAuth2ClientCredentialsAuthenticationToken clientCredentialsAuthentication =
@@ -217,13 +207,25 @@ private static String encodeBasicAuth(String clientId, String secret) throws Exc
217
207
static class AuthorizationServerConfiguration {
218
208
219
209
@ Bean
220
- RegisteredClientRepository registeredClientRepository () {
221
- return registeredClientRepository ;
210
+ OAuth2AuthorizationService authorizationService () {
211
+ return new InMemoryOAuth2AuthorizationService () ;
222
212
}
223
213
224
214
@ Bean
225
- OAuth2AuthorizationService authorizationService () {
226
- return authorizationService ;
215
+ OAuth2AuthorizationConsentService authorizationConsentService () {
216
+ return new InMemoryOAuth2AuthorizationConsentService ();
217
+ }
218
+
219
+ @ Bean
220
+ RegisteredClientRepository registeredClientRepository () {
221
+ // @formatter:off
222
+ RegisteredClient dummyClient = TestRegisteredClients .registeredClient ()
223
+ .id ("dummy-client" )
224
+ .clientId ("dummy-client" )
225
+ .clientSecret ("dummy-secret" )
226
+ .build ();
227
+ // @formatter:on
228
+ return new InMemoryRegisteredClientRepository (dummyClient );
227
229
}
228
230
229
231
@ Bean
0 commit comments