Search in sources :

Example 26 with Converter

use of org.springframework.core.convert.converter.Converter in project spring-security by spring-projects.

the class OidcUserServiceTests method loadUserWhenCustomClaimTypeConverterFactorySetThenApplied.

@Test
public void loadUserWhenCustomClaimTypeConverterFactorySetThenApplied() {
    // @formatter:off
    String userInfoResponse = "{\n" + "   \"sub\": \"subject1\",\n" + "   \"name\": \"first last\",\n" + "   \"given_name\": \"first\",\n" + "   \"family_name\": \"last\",\n" + "   \"preferred_username\": \"user1\",\n" + "   \"email\": \"user1@example.com\"\n" + "}\n";
    // @formatter:on
    this.server.enqueue(jsonResponse(userInfoResponse));
    String userInfoUri = this.server.url("/user").toString();
    ClientRegistration clientRegistration = this.clientRegistrationBuilder.userInfoUri(userInfoUri).build();
    Function<ClientRegistration, Converter<Map<String, Object>, Map<String, Object>>> customClaimTypeConverterFactory = mock(Function.class);
    this.userService.setClaimTypeConverterFactory(customClaimTypeConverterFactory);
    given(customClaimTypeConverterFactory.apply(same(clientRegistration))).willReturn(new ClaimTypeConverter(OidcUserService.createDefaultClaimTypeConverters()));
    this.userService.loadUser(new OidcUserRequest(clientRegistration, this.accessToken, this.idToken));
    verify(customClaimTypeConverterFactory).apply(same(clientRegistration));
}
Also used : ClientRegistration(org.springframework.security.oauth2.client.registration.ClientRegistration) ClaimTypeConverter(org.springframework.security.oauth2.core.converter.ClaimTypeConverter) Converter(org.springframework.core.convert.converter.Converter) ClaimTypeConverter(org.springframework.security.oauth2.core.converter.ClaimTypeConverter) Test(org.junit.jupiter.api.Test)

Example 27 with Converter

use of org.springframework.core.convert.converter.Converter in project spring-security by spring-projects.

the class MappedJwtClaimSetConverter method convert.

@Override
public Map<String, Object> convert(Map<String, Object> claims) {
    Assert.notNull(claims, "claims cannot be null");
    Map<String, Object> mappedClaims = new HashMap<>(claims);
    for (Map.Entry<String, Converter<Object, ?>> entry : this.claimTypeConverters.entrySet()) {
        String claimName = entry.getKey();
        Converter<Object, ?> converter = entry.getValue();
        if (converter != null) {
            Object claim = claims.get(claimName);
            Object mappedClaim = converter.convert(claim);
            mappedClaims.compute(claimName, (key, value) -> mappedClaim);
        }
    }
    Instant issuedAt = (Instant) mappedClaims.get(JwtClaimNames.IAT);
    Instant expiresAt = (Instant) mappedClaims.get(JwtClaimNames.EXP);
    if (issuedAt == null && expiresAt != null) {
        mappedClaims.put(JwtClaimNames.IAT, expiresAt.minusSeconds(1));
    }
    return mappedClaims;
}
Also used : HashMap(java.util.HashMap) Instant(java.time.Instant) Converter(org.springframework.core.convert.converter.Converter) ClaimTypeConverter(org.springframework.security.oauth2.core.converter.ClaimTypeConverter) Map(java.util.Map) HashMap(java.util.HashMap)

Example 28 with Converter

use of org.springframework.core.convert.converter.Converter in project spring-security by spring-projects.

the class OidcIdTokenDecoderFactoryTests method createDecoderWhenCustomClaimTypeConverterFactorySetThenApplied.

@Test
public void createDecoderWhenCustomClaimTypeConverterFactorySetThenApplied() {
    Function<ClientRegistration, Converter<Map<String, Object>, Map<String, Object>>> customClaimTypeConverterFactory = mock(Function.class);
    this.idTokenDecoderFactory.setClaimTypeConverterFactory(customClaimTypeConverterFactory);
    ClientRegistration clientRegistration = this.registration.build();
    given(customClaimTypeConverterFactory.apply(same(clientRegistration))).willReturn(new ClaimTypeConverter(OidcIdTokenDecoderFactory.createDefaultClaimTypeConverters()));
    this.idTokenDecoderFactory.createDecoder(clientRegistration);
    verify(customClaimTypeConverterFactory).apply(same(clientRegistration));
}
Also used : ClientRegistration(org.springframework.security.oauth2.client.registration.ClientRegistration) Converter(org.springframework.core.convert.converter.Converter) ClaimTypeConverter(org.springframework.security.oauth2.core.converter.ClaimTypeConverter) ClaimTypeConverter(org.springframework.security.oauth2.core.converter.ClaimTypeConverter) Test(org.junit.jupiter.api.Test)

Example 29 with Converter

use of org.springframework.core.convert.converter.Converter in project spring-security by spring-projects.

the class OidcReactiveOAuth2UserServiceTests method loadUserWhenCustomClaimTypeConverterFactorySetThenApplied.

@Test
public void loadUserWhenCustomClaimTypeConverterFactorySetThenApplied() {
    Map<String, Object> attributes = new HashMap<>();
    attributes.put(StandardClaimNames.SUB, "subject");
    attributes.put("user", "rob");
    OAuth2User oauth2User = new DefaultOAuth2User(AuthorityUtils.createAuthorityList("ROLE_USER"), attributes, "user");
    given(this.oauth2UserService.loadUser(any())).willReturn(Mono.just(oauth2User));
    OidcUserRequest userRequest = userRequest();
    Function<ClientRegistration, Converter<Map<String, Object>, Map<String, Object>>> customClaimTypeConverterFactory = mock(Function.class);
    this.userService.setClaimTypeConverterFactory(customClaimTypeConverterFactory);
    given(customClaimTypeConverterFactory.apply(same(userRequest.getClientRegistration()))).willReturn(new ClaimTypeConverter(OidcReactiveOAuth2UserService.createDefaultClaimTypeConverters()));
    this.userService.loadUser(userRequest).block().getUserInfo();
    verify(customClaimTypeConverterFactory).apply(same(userRequest.getClientRegistration()));
}
Also used : DefaultOAuth2User(org.springframework.security.oauth2.core.user.DefaultOAuth2User) OAuth2User(org.springframework.security.oauth2.core.user.OAuth2User) ClientRegistration(org.springframework.security.oauth2.client.registration.ClientRegistration) HashMap(java.util.HashMap) ClaimTypeConverter(org.springframework.security.oauth2.core.converter.ClaimTypeConverter) Converter(org.springframework.core.convert.converter.Converter) DefaultOAuth2User(org.springframework.security.oauth2.core.user.DefaultOAuth2User) ClaimTypeConverter(org.springframework.security.oauth2.core.converter.ClaimTypeConverter) Test(org.junit.jupiter.api.Test)

Example 30 with Converter

use of org.springframework.core.convert.converter.Converter in project spring-security by spring-projects.

the class ReactiveJwtGrantedAuthoritiesConverterAdapterTests method convertWithGrantedAuthoritiesConverter.

@Test
public void convertWithGrantedAuthoritiesConverter() {
    Jwt jwt = TestJwts.jwt().claim("scope", "message:read message:write").build();
    Converter<Jwt, Collection<GrantedAuthority>> grantedAuthoritiesConverter = (token) -> Arrays.asList(new SimpleGrantedAuthority("blah"));
    Collection<GrantedAuthority> authorities = new ReactiveJwtGrantedAuthoritiesConverterAdapter(grantedAuthoritiesConverter).convert(jwt).toStream().collect(Collectors.toList());
    assertThat(authorities).containsExactly(new SimpleGrantedAuthority("blah"));
}
Also used : Test(org.junit.jupiter.api.Test) Converter(org.springframework.core.convert.converter.Converter) Arrays(java.util.Arrays) Collection(java.util.Collection) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Assertions.assertThatIllegalArgumentException(org.assertj.core.api.Assertions.assertThatIllegalArgumentException) SimpleGrantedAuthority(org.springframework.security.core.authority.SimpleGrantedAuthority) TestJwts(org.springframework.security.oauth2.jwt.TestJwts) Jwt(org.springframework.security.oauth2.jwt.Jwt) Collectors(java.util.stream.Collectors) GrantedAuthority(org.springframework.security.core.GrantedAuthority) SimpleGrantedAuthority(org.springframework.security.core.authority.SimpleGrantedAuthority) Jwt(org.springframework.security.oauth2.jwt.Jwt) SimpleGrantedAuthority(org.springframework.security.core.authority.SimpleGrantedAuthority) GrantedAuthority(org.springframework.security.core.GrantedAuthority) Collection(java.util.Collection) Test(org.junit.jupiter.api.Test)

Aggregations

Converter (org.springframework.core.convert.converter.Converter)33 Test (org.junit.jupiter.api.Test)25 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)15 Assertions.assertThatIllegalArgumentException (org.assertj.core.api.Assertions.assertThatIllegalArgumentException)13 Assertions.assertThatExceptionOfType (org.assertj.core.api.Assertions.assertThatExceptionOfType)12 ClientRegistration (org.springframework.security.oauth2.client.registration.ClientRegistration)12 StandardCharsets (java.nio.charset.StandardCharsets)10 ArgumentMatchers.any (org.mockito.ArgumentMatchers.any)10 BDDMockito.given (org.mockito.BDDMockito.given)10 Mockito.mock (org.mockito.Mockito.mock)10 OAuth2AccessTokenResponse (org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse)9 JWK (com.nimbusds.jose.jwk.JWK)8 Collections (java.util.Collections)8 Function (java.util.function.Function)8 SecretKeySpec (javax.crypto.spec.SecretKeySpec)8 MockResponse (okhttp3.mockwebserver.MockResponse)8 MockWebServer (okhttp3.mockwebserver.MockWebServer)8 RecordedRequest (okhttp3.mockwebserver.RecordedRequest)8 AfterEach (org.junit.jupiter.api.AfterEach)8 BeforeEach (org.junit.jupiter.api.BeforeEach)8