|
@@ -16,107 +16,113 @@
|
|
|
|
|
|
package org.springframework.security.oauth2.core.oidc.user;
|
|
|
|
|
|
-import java.time.Instant;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Set;
|
|
|
-
|
|
|
-import org.junit.Rule;
|
|
|
import org.junit.Test;
|
|
|
-import org.junit.rules.ExpectedException;
|
|
|
import org.springframework.security.core.GrantedAuthority;
|
|
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
|
|
-import org.springframework.security.oauth2.core.oidc.OidcIdToken;
|
|
|
import org.springframework.security.oauth2.core.oidc.IdTokenClaimNames;
|
|
|
+import org.springframework.security.oauth2.core.oidc.OidcIdToken;
|
|
|
import org.springframework.security.oauth2.core.oidc.OidcUserInfo;
|
|
|
import org.springframework.security.oauth2.core.oidc.StandardClaimNames;
|
|
|
|
|
|
+import java.time.Instant;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
|
|
/**
|
|
|
* Tests for {@link DefaultOidcUser}.
|
|
|
*
|
|
|
* @author Vedran Pavic
|
|
|
+ * @author Joe Grandja
|
|
|
*/
|
|
|
public class DefaultOidcUserTests {
|
|
|
-
|
|
|
- private static final SimpleGrantedAuthority TEST_AUTHORITY = new SimpleGrantedAuthority("ROLE_USER");
|
|
|
-
|
|
|
- private static final Set<GrantedAuthority> TEST_AUTHORITIES = Collections.singleton(TEST_AUTHORITY);
|
|
|
-
|
|
|
- private static final String TEST_SUBJECT = "test";
|
|
|
-
|
|
|
- private static final String TEST_EMAIL = "test@example.com";
|
|
|
-
|
|
|
- private static final Map<String, Object> TEST_ID_TOKEN_CLAIMS = new HashMap<>();
|
|
|
+ private static final SimpleGrantedAuthority AUTHORITY = new SimpleGrantedAuthority("ROLE_USER");
|
|
|
+ private static final Set<GrantedAuthority> AUTHORITIES = Collections.singleton(AUTHORITY);
|
|
|
+ private static final String SUBJECT = "test-subject";
|
|
|
+ private static final String EMAIL = "test-subject@example.com";
|
|
|
+ private static final String NAME = "test-name";
|
|
|
+ private static final Map<String, Object> ID_TOKEN_CLAIMS = new HashMap<>();
|
|
|
+ private static final Map<String, Object> USER_INFO_CLAIMS = new HashMap<>();
|
|
|
|
|
|
static {
|
|
|
- TEST_ID_TOKEN_CLAIMS.put(IdTokenClaimNames.ISS, "https://example.com");
|
|
|
- TEST_ID_TOKEN_CLAIMS.put(IdTokenClaimNames.SUB, TEST_SUBJECT);
|
|
|
+ ID_TOKEN_CLAIMS.put(IdTokenClaimNames.ISS, "https://example.com");
|
|
|
+ ID_TOKEN_CLAIMS.put(IdTokenClaimNames.SUB, SUBJECT);
|
|
|
+ USER_INFO_CLAIMS.put(StandardClaimNames.NAME, NAME);
|
|
|
+ USER_INFO_CLAIMS.put(StandardClaimNames.EMAIL, EMAIL);
|
|
|
}
|
|
|
|
|
|
- private static final OidcIdToken TEST_ID_TOKEN = new OidcIdToken("value", Instant.EPOCH, Instant.MAX, TEST_ID_TOKEN_CLAIMS);
|
|
|
-
|
|
|
- private static final OidcUserInfo TEST_USER_INFO = new OidcUserInfo(Collections.singletonMap(StandardClaimNames.EMAIL, TEST_EMAIL));
|
|
|
+ private static final OidcIdToken ID_TOKEN = new OidcIdToken("id-token-value", Instant.EPOCH, Instant.MAX, ID_TOKEN_CLAIMS);
|
|
|
+ private static final OidcUserInfo USER_INFO = new OidcUserInfo(USER_INFO_CLAIMS);
|
|
|
|
|
|
- @Rule
|
|
|
- public ExpectedException thrown = ExpectedException.none();
|
|
|
+ @Test(expected = IllegalArgumentException.class)
|
|
|
+ public void constructorWhenAuthoritiesIsNullThenThrowIllegalArgumentException() {
|
|
|
+ new DefaultOidcUser(null, ID_TOKEN);
|
|
|
+ }
|
|
|
|
|
|
- @Test
|
|
|
- public void constructorWhenAuthoritiesAndIdTokenThenIsCreated() {
|
|
|
- DefaultOidcUser user = new DefaultOidcUser(TEST_AUTHORITIES, TEST_ID_TOKEN);
|
|
|
+ @Test(expected = IllegalArgumentException.class)
|
|
|
+ public void constructorWhenIdTokenIsNullThenThrowIllegalArgumentException() {
|
|
|
+ new DefaultOidcUser(AUTHORITIES, null);
|
|
|
+ }
|
|
|
|
|
|
- assertThat(user.getName()).isEqualTo(TEST_SUBJECT);
|
|
|
- assertThat(user.getAuthorities()).hasSize(1);
|
|
|
- assertThat(user.getAuthorities().iterator().next()).isEqualTo(TEST_AUTHORITY);
|
|
|
- assertThat(user.getAttributes()).containsOnlyKeys(IdTokenClaimNames.ISS, IdTokenClaimNames.SUB);
|
|
|
+ @Test(expected = IllegalArgumentException.class)
|
|
|
+ public void constructorWhenNameAttributeKeyInvalidThenThrowIllegalArgumentException() {
|
|
|
+ new DefaultOidcUser(AUTHORITIES, ID_TOKEN, "invalid");
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
- public void constructorWhenAuthoritiesAndIdTokenAndNameAttributeKeyThenIsCreated() {
|
|
|
- DefaultOidcUser user = new DefaultOidcUser(TEST_AUTHORITIES, TEST_ID_TOKEN, IdTokenClaimNames.SUB);
|
|
|
+ public void constructorWhenAuthoritiesIdTokenProvidedThenCreated() {
|
|
|
+ DefaultOidcUser user = new DefaultOidcUser(AUTHORITIES, ID_TOKEN);
|
|
|
|
|
|
- assertThat(user.getName()).isEqualTo(TEST_SUBJECT);
|
|
|
+ assertThat(user.getClaims()).containsOnlyKeys(IdTokenClaimNames.ISS, IdTokenClaimNames.SUB);
|
|
|
+ assertThat(user.getIdToken()).isEqualTo(ID_TOKEN);
|
|
|
+ assertThat(user.getName()).isEqualTo(SUBJECT);
|
|
|
assertThat(user.getAuthorities()).hasSize(1);
|
|
|
- assertThat(user.getAuthorities().iterator().next()).isEqualTo(TEST_AUTHORITY);
|
|
|
+ assertThat(user.getAuthorities().iterator().next()).isEqualTo(AUTHORITY);
|
|
|
assertThat(user.getAttributes()).containsOnlyKeys(IdTokenClaimNames.ISS, IdTokenClaimNames.SUB);
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
- public void constructorWhenAuthoritiesAndIdTokenAndUserInfoThenIsCreated() {
|
|
|
- DefaultOidcUser user = new DefaultOidcUser(TEST_AUTHORITIES, TEST_ID_TOKEN, TEST_USER_INFO);
|
|
|
+ public void constructorWhenAuthoritiesIdTokenNameAttributeKeyProvidedThenCreated() {
|
|
|
+ DefaultOidcUser user = new DefaultOidcUser(AUTHORITIES, ID_TOKEN, IdTokenClaimNames.SUB);
|
|
|
|
|
|
- assertThat(user.getName()).isEqualTo(TEST_SUBJECT);
|
|
|
+ assertThat(user.getClaims()).containsOnlyKeys(IdTokenClaimNames.ISS, IdTokenClaimNames.SUB);
|
|
|
+ assertThat(user.getIdToken()).isEqualTo(ID_TOKEN);
|
|
|
+ assertThat(user.getName()).isEqualTo(SUBJECT);
|
|
|
assertThat(user.getAuthorities()).hasSize(1);
|
|
|
- assertThat(user.getAuthorities().iterator().next()).isEqualTo(TEST_AUTHORITY);
|
|
|
- assertThat(user.getAttributes()).containsOnlyKeys(IdTokenClaimNames.ISS, IdTokenClaimNames.SUB, StandardClaimNames.EMAIL);
|
|
|
+ assertThat(user.getAuthorities().iterator().next()).isEqualTo(AUTHORITY);
|
|
|
+ assertThat(user.getAttributes()).containsOnlyKeys(IdTokenClaimNames.ISS, IdTokenClaimNames.SUB);
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
- public void constructorWhenAuthoritiesAndIdTokenAndUserInfoAndNameAttributeKeyThenIsCreated() {
|
|
|
- DefaultOidcUser user = new DefaultOidcUser(TEST_AUTHORITIES, TEST_ID_TOKEN, TEST_USER_INFO, StandardClaimNames.EMAIL);
|
|
|
-
|
|
|
- assertThat(user.getName()).isEqualTo(TEST_EMAIL);
|
|
|
+ public void constructorWhenAuthoritiesIdTokenUserInfoProvidedThenCreated() {
|
|
|
+ DefaultOidcUser user = new DefaultOidcUser(AUTHORITIES, ID_TOKEN, USER_INFO);
|
|
|
+
|
|
|
+ assertThat(user.getClaims()).containsOnlyKeys(
|
|
|
+ IdTokenClaimNames.ISS, IdTokenClaimNames.SUB, StandardClaimNames.NAME, StandardClaimNames.EMAIL);
|
|
|
+ assertThat(user.getIdToken()).isEqualTo(ID_TOKEN);
|
|
|
+ assertThat(user.getUserInfo()).isEqualTo(USER_INFO);
|
|
|
+ assertThat(user.getName()).isEqualTo(SUBJECT);
|
|
|
assertThat(user.getAuthorities()).hasSize(1);
|
|
|
- assertThat(user.getAuthorities().iterator().next()).isEqualTo(TEST_AUTHORITY);
|
|
|
- assertThat(user.getAttributes()).containsOnlyKeys(IdTokenClaimNames.ISS, IdTokenClaimNames.SUB, StandardClaimNames.EMAIL);
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void constructorWhenIdTokenIsNullThenThrowsException() {
|
|
|
- this.thrown.expect(IllegalArgumentException.class);
|
|
|
- this.thrown.expectMessage("idToken cannot be null");
|
|
|
-
|
|
|
- new DefaultOidcUser(TEST_AUTHORITIES, null);
|
|
|
+ assertThat(user.getAuthorities().iterator().next()).isEqualTo(AUTHORITY);
|
|
|
+ assertThat(user.getAttributes()).containsOnlyKeys(
|
|
|
+ IdTokenClaimNames.ISS, IdTokenClaimNames.SUB, StandardClaimNames.NAME, StandardClaimNames.EMAIL);
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
- public void constructorWhenNameAttributeKeyClaimIsNotPresentThenThrowsException() {
|
|
|
- this.thrown.expect(IllegalArgumentException.class);
|
|
|
- this.thrown.expectMessage("Missing attribute '" + StandardClaimNames.NAME + "' in attributes");
|
|
|
-
|
|
|
- new DefaultOidcUser(TEST_AUTHORITIES, TEST_ID_TOKEN, TEST_USER_INFO, StandardClaimNames.NAME);
|
|
|
+ public void constructorWhenAllParametersProvidedAndValidThenCreated() {
|
|
|
+ DefaultOidcUser user = new DefaultOidcUser(AUTHORITIES, ID_TOKEN, USER_INFO, StandardClaimNames.EMAIL);
|
|
|
+
|
|
|
+ assertThat(user.getClaims()).containsOnlyKeys(
|
|
|
+ IdTokenClaimNames.ISS, IdTokenClaimNames.SUB, StandardClaimNames.NAME, StandardClaimNames.EMAIL);
|
|
|
+ assertThat(user.getIdToken()).isEqualTo(ID_TOKEN);
|
|
|
+ assertThat(user.getUserInfo()).isEqualTo(USER_INFO);
|
|
|
+ assertThat(user.getName()).isEqualTo(EMAIL);
|
|
|
+ assertThat(user.getAuthorities()).hasSize(1);
|
|
|
+ assertThat(user.getAuthorities().iterator().next()).isEqualTo(AUTHORITY);
|
|
|
+ assertThat(user.getAttributes()).containsOnlyKeys(
|
|
|
+ IdTokenClaimNames.ISS, IdTokenClaimNames.SUB, StandardClaimNames.NAME, StandardClaimNames.EMAIL);
|
|
|
}
|
|
|
-
|
|
|
}
|