16
16
package org .springframework .security .oauth2 .client .oidc .userinfo ;
17
17
18
18
import java .time .Instant ;
19
- import java .util .Arrays ;
20
19
import java .util .Collections ;
21
20
import java .util .HashMap ;
22
21
import java .util .Iterator ;
33
32
import org .junit .Test ;
34
33
import org .junit .rules .ExpectedException ;
35
34
36
- import org .springframework .core .ParameterizedTypeReference ;
37
35
import org .springframework .core .convert .converter .Converter ;
38
36
import org .springframework .http .HttpHeaders ;
39
37
import org .springframework .http .HttpMethod ;
40
- import org .springframework .http .HttpStatus ;
41
38
import org .springframework .http .MediaType ;
42
- import org .springframework .http .RequestEntity ;
43
- import org .springframework .http .ResponseEntity ;
44
39
import org .springframework .security .core .GrantedAuthority ;
45
40
import org .springframework .security .core .authority .SimpleGrantedAuthority ;
46
41
import org .springframework .security .oauth2 .client .registration .ClientRegistration ;
47
42
import org .springframework .security .oauth2 .client .userinfo .DefaultOAuth2UserService ;
48
- import org .springframework .security .oauth2 .client .userinfo .OAuth2UserRequest ;
49
43
import org .springframework .security .oauth2 .core .AuthenticationMethod ;
50
44
import org .springframework .security .oauth2 .core .OAuth2AccessToken ;
51
45
import org .springframework .security .oauth2 .core .OAuth2AuthenticationException ;
56
50
import org .springframework .security .oauth2 .core .oidc .StandardClaimNames ;
57
51
import org .springframework .security .oauth2 .core .oidc .user .OidcUser ;
58
52
import org .springframework .security .oauth2 .core .oidc .user .OidcUserAuthority ;
59
- import org .springframework .web .client .RestOperations ;
60
53
61
54
import static org .assertj .core .api .Assertions .assertThat ;
62
55
import static org .assertj .core .api .Assertions .assertThatThrownBy ;
63
56
import static org .hamcrest .CoreMatchers .containsString ;
64
- import static org .mockito .Mockito .any ;
65
57
import static org .mockito .Mockito .mock ;
66
- import static org .mockito .Mockito .nullable ;
67
58
import static org .mockito .Mockito .same ;
68
59
import static org .mockito .Mockito .verify ;
69
60
import static org .mockito .Mockito .when ;
70
61
import static org .springframework .security .oauth2 .client .registration .TestClientRegistrations .clientRegistration ;
62
+ import static org .springframework .security .oauth2 .core .TestOAuth2AccessTokens .noScopes ;
71
63
import static org .springframework .security .oauth2 .core .TestOAuth2AccessTokens .scopes ;
72
64
import static org .springframework .security .oauth2 .core .oidc .TestOidcIdTokens .idToken ;
73
65
@@ -272,7 +264,7 @@ public void loadUserWhenUserInfoSuccessResponseThenReturnUser() {
272
264
assertThat (user .getUserInfo ().getPreferredUsername ()).isEqualTo ("user1" );
273
265
assertThat (
user .
getUserInfo ().
getEmail ()).
isEqualTo (
"[email protected] " );
274
266
275
- assertThat (user .getAuthorities ().size ()).isEqualTo (1 );
267
+ assertThat (user .getAuthorities ().size ()).isEqualTo (3 );
276
268
assertThat (user .getAuthorities ().iterator ().next ()).isInstanceOf (OidcUserAuthority .class );
277
269
OidcUserAuthority userAuthority = (OidcUserAuthority ) user .getAuthorities ().iterator ().next ();
278
270
assertThat (userAuthority .getAuthority ()).isEqualTo ("ROLE_USER" );
@@ -499,15 +491,13 @@ public void loadUserWhenCustomClaimTypeConverterFactorySetThenApplied() {
499
491
}
500
492
501
493
@ Test
502
- public void loadUserWhenAttributesContainScopeThenIndividualScopeAuthorities () {
494
+ public void loadUserWhenTokenContainsScopesThenIndividualScopeAuthorities () {
503
495
Map <String , Object > body = new HashMap <>();
504
496
body .put ("id" , "id" );
505
497
body .put ("sub" , "test-subject" );
506
- body .put ("scope" , "message:read message:write" );
507
498
OidcUserService userService = new OidcUserService ();
508
- userService .setOauth2UserService (withMockResponse (body ));
509
- OidcUserRequest request = new OidcUserRequest (clientRegistration ().
510
- userInfoUri ("uri" ).build (), scopes ("profile" ), idToken (body ));
499
+ OidcUserRequest request = new OidcUserRequest (clientRegistration ().build (),
500
+ scopes ("message:read" , "message:write" ), idToken (body ));
511
501
OidcUser user = userService .loadUser (request );
512
502
513
503
assertThat (user .getAuthorities ()).hasSize (3 );
@@ -518,53 +508,20 @@ public void loadUserWhenAttributesContainScopeThenIndividualScopeAuthorities() {
518
508
}
519
509
520
510
@ Test
521
- public void loadUserWhenAttributesContainScpThenIndividualScopeAuthorities () {
511
+ public void loadUserWhenTokenDoesNotContainScopesThenNoScopeAuthorities () {
522
512
Map <String , Object > body = new HashMap <>();
523
513
body .put ("id" , "id" );
524
514
body .put ("sub" , "test-subject" );
525
- body .put ("scp" , Arrays .asList ("message:read" , "message:write" ));
526
515
OidcUserService userService = new OidcUserService ();
527
- userService .setOauth2UserService (withMockResponse (body ));
528
- OidcUserRequest request = new OidcUserRequest (clientRegistration ().
529
- userInfoUri ("uri" ).build (), scopes ("profile" ), idToken (body ));
530
- OidcUser user = userService .loadUser (request );
531
-
532
- assertThat (user .getAuthorities ()).hasSize (3 );
533
- Iterator <? extends GrantedAuthority > authorities = user .getAuthorities ().iterator ();
534
- assertThat (authorities .next ()).isInstanceOf (OidcUserAuthority .class );
535
- assertThat (authorities .next ()).isEqualTo (new SimpleGrantedAuthority ("SCOPE_message:read" ));
536
- assertThat (authorities .next ()).isEqualTo (new SimpleGrantedAuthority ("SCOPE_message:write" ));
537
- }
538
-
539
- @ Test
540
- public void loadUserWhenAttributesDoesNotContainScopesThenNoScopeAuthorities () {
541
- Map <String , Object > body = new HashMap <>();
542
- body .put ("id" , "id" );
543
- body .put ("sub" , "test-subject" );
544
- body .put ("authorities" , Arrays .asList ("message:read" , "message:write" ));
545
- OidcUserService userService = new OidcUserService ();
546
- userService .setOauth2UserService (withMockResponse (body ));
547
- OidcUserRequest request = new OidcUserRequest (clientRegistration ().
548
- userInfoUri ("uri" ).build (), scopes ("profile" ), idToken (body ));
516
+ OidcUserRequest request = new OidcUserRequest (clientRegistration ().build (),
517
+ noScopes (), idToken (body ));
549
518
OidcUser user = userService .loadUser (request );
550
519
551
520
assertThat (user .getAuthorities ()).hasSize (1 );
552
521
Iterator <? extends GrantedAuthority > authorities = user .getAuthorities ().iterator ();
553
522
assertThat (authorities .next ()).isInstanceOf (OidcUserAuthority .class );
554
523
}
555
524
556
- private DefaultOAuth2UserService withMockResponse (Map <String , Object > response ) {
557
- ResponseEntity <Map <String , Object >> responseEntity = new ResponseEntity <>(response , HttpStatus .OK );
558
- Converter <OAuth2UserRequest , RequestEntity <?>> requestEntityConverter = mock (Converter .class );
559
- RestOperations rest = mock (RestOperations .class );
560
- when (rest .exchange (nullable (RequestEntity .class ), any (ParameterizedTypeReference .class )))
561
- .thenReturn (responseEntity );
562
- DefaultOAuth2UserService userService = new DefaultOAuth2UserService ();
563
- userService .setRequestEntityConverter (requestEntityConverter );
564
- userService .setRestOperations (rest );
565
- return userService ;
566
- }
567
-
568
525
private MockResponse jsonResponse (String json ) {
569
526
return new MockResponse ()
570
527
.setHeader (HttpHeaders .CONTENT_TYPE , MediaType .APPLICATION_JSON_VALUE )
0 commit comments