1616package org .springframework .security .oauth2 .client .oidc .userinfo ;
1717
1818import java .time .Instant ;
19- import java .util .Arrays ;
2019import java .util .Collections ;
2120import java .util .HashMap ;
2221import java .util .Iterator ;
3332import org .junit .Test ;
3433import org .junit .rules .ExpectedException ;
3534
36- import org .springframework .core .ParameterizedTypeReference ;
3735import org .springframework .core .convert .converter .Converter ;
3836import org .springframework .http .HttpHeaders ;
3937import org .springframework .http .HttpMethod ;
40- import org .springframework .http .HttpStatus ;
4138import org .springframework .http .MediaType ;
42- import org .springframework .http .RequestEntity ;
43- import org .springframework .http .ResponseEntity ;
4439import org .springframework .security .core .GrantedAuthority ;
4540import org .springframework .security .core .authority .SimpleGrantedAuthority ;
4641import org .springframework .security .oauth2 .client .registration .ClientRegistration ;
4742import org .springframework .security .oauth2 .client .userinfo .DefaultOAuth2UserService ;
48- import org .springframework .security .oauth2 .client .userinfo .OAuth2UserRequest ;
4943import org .springframework .security .oauth2 .core .AuthenticationMethod ;
5044import org .springframework .security .oauth2 .core .OAuth2AccessToken ;
5145import org .springframework .security .oauth2 .core .OAuth2AuthenticationException ;
5650import org .springframework .security .oauth2 .core .oidc .StandardClaimNames ;
5751import org .springframework .security .oauth2 .core .oidc .user .OidcUser ;
5852import org .springframework .security .oauth2 .core .oidc .user .OidcUserAuthority ;
59- import org .springframework .web .client .RestOperations ;
6053
6154import static org .assertj .core .api .Assertions .assertThat ;
6255import static org .assertj .core .api .Assertions .assertThatThrownBy ;
6356import static org .hamcrest .CoreMatchers .containsString ;
64- import static org .mockito .Mockito .any ;
6557import static org .mockito .Mockito .mock ;
66- import static org .mockito .Mockito .nullable ;
6758import static org .mockito .Mockito .same ;
6859import static org .mockito .Mockito .verify ;
6960import static org .mockito .Mockito .when ;
7061import static org .springframework .security .oauth2 .client .registration .TestClientRegistrations .clientRegistration ;
62+ import static org .springframework .security .oauth2 .core .TestOAuth2AccessTokens .noScopes ;
7163import static org .springframework .security .oauth2 .core .TestOAuth2AccessTokens .scopes ;
7264import static org .springframework .security .oauth2 .core .oidc .TestOidcIdTokens .idToken ;
7365
@@ -272,7 +264,7 @@ public void loadUserWhenUserInfoSuccessResponseThenReturnUser() {
272264 assertThat (user .getUserInfo ().getPreferredUsername ()).isEqualTo ("user1" );
273265 assertThat (user .getUserInfo ().getEmail ()).isEqualTo ("user1@example.com" );
274266
275- assertThat (user .getAuthorities ().size ()).isEqualTo (1 );
267+ assertThat (user .getAuthorities ().size ()).isEqualTo (3 );
276268 assertThat (user .getAuthorities ().iterator ().next ()).isInstanceOf (OidcUserAuthority .class );
277269 OidcUserAuthority userAuthority = (OidcUserAuthority ) user .getAuthorities ().iterator ().next ();
278270 assertThat (userAuthority .getAuthority ()).isEqualTo ("ROLE_USER" );
@@ -499,15 +491,13 @@ public void loadUserWhenCustomClaimTypeConverterFactorySetThenApplied() {
499491 }
500492
501493 @ Test
502- public void loadUserWhenAttributesContainScopeThenIndividualScopeAuthorities () {
494+ public void loadUserWhenTokenContainsScopesThenIndividualScopeAuthorities () {
503495 Map <String , Object > body = new HashMap <>();
504496 body .put ("id" , "id" );
505497 body .put ("sub" , "test-subject" );
506- body .put ("scope" , "message:read message:write" );
507498 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 ));
511501 OidcUser user = userService .loadUser (request );
512502
513503 assertThat (user .getAuthorities ()).hasSize (3 );
@@ -518,53 +508,20 @@ public void loadUserWhenAttributesContainScopeThenIndividualScopeAuthorities() {
518508 }
519509
520510 @ Test
521- public void loadUserWhenAttributesContainScpThenIndividualScopeAuthorities () {
511+ public void loadUserWhenTokenDoesNotContainScopesThenNoScopeAuthorities () {
522512 Map <String , Object > body = new HashMap <>();
523513 body .put ("id" , "id" );
524514 body .put ("sub" , "test-subject" );
525- body .put ("scp" , Arrays .asList ("message:read" , "message:write" ));
526515 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 ));
549518 OidcUser user = userService .loadUser (request );
550519
551520 assertThat (user .getAuthorities ()).hasSize (1 );
552521 Iterator <? extends GrantedAuthority > authorities = user .getAuthorities ().iterator ();
553522 assertThat (authorities .next ()).isInstanceOf (OidcUserAuthority .class );
554523 }
555524
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-
568525 private MockResponse jsonResponse (String json ) {
569526 return new MockResponse ()
570527 .setHeader (HttpHeaders .CONTENT_TYPE , MediaType .APPLICATION_JSON_VALUE )
0 commit comments