|
16 | 16 |
|
17 | 17 | package org.springframework.security.oauth2.client.jackson; |
18 | 18 |
|
| 19 | +import java.net.URL; |
19 | 20 | import java.time.Instant; |
20 | 21 | import java.util.ArrayList; |
21 | 22 | import java.util.Collection; |
22 | 23 | import java.util.Collections; |
| 24 | +import java.util.HashMap; |
23 | 25 | import java.util.List; |
| 26 | +import java.util.Map; |
24 | 27 | import java.util.stream.Collectors; |
25 | 28 |
|
26 | 29 | import com.fasterxml.jackson.datatype.jsr310.DecimalUtils; |
@@ -171,6 +174,33 @@ public void deserializeWhenRequiredAttributesOnlyThenDeserializes() throws Excep |
171 | 174 | assertThat(principal.getUserInfo()).isNull(); |
172 | 175 | } |
173 | 176 |
|
| 177 | + @Test |
| 178 | + public void deserializeWhenClaimsContainUrlAndInstantThenDeserializes() throws Exception { |
| 179 | + Map<String, Object> claims = new HashMap<>(); |
| 180 | + Instant issuedAt = Instant.now(); |
| 181 | + Instant expiresAt = issuedAt.plusSeconds(3600); |
| 182 | + claims.put(IdTokenClaimNames.ISS, new URL("http://localhost/issuer")); |
| 183 | + claims.put(IdTokenClaimNames.SUB, "subject"); |
| 184 | + claims.put(IdTokenClaimNames.IAT, issuedAt); |
| 185 | + claims.put(IdTokenClaimNames.EXP, expiresAt); |
| 186 | + |
| 187 | + OidcIdToken idToken = new OidcIdToken("id-token", issuedAt, expiresAt, claims); |
| 188 | + Collection<GrantedAuthority> authorities = |
| 189 | + Collections.singleton(new OidcUserAuthority(idToken)); |
| 190 | + DefaultOidcUser principal = new DefaultOidcUser(authorities, idToken); |
| 191 | + OAuth2AuthenticationToken authentication = |
| 192 | + new OAuth2AuthenticationToken(principal, authorities, "registration-id"); |
| 193 | + |
| 194 | + String json = this.mapper.writeValueAsString(authentication); |
| 195 | + OAuth2AuthenticationToken deserialized = |
| 196 | + this.mapper.readValue(json, OAuth2AuthenticationToken.class); |
| 197 | + |
| 198 | + assertThat(deserialized).isNotNull(); |
| 199 | + DefaultOidcUser deserializedUser = (DefaultOidcUser) deserialized.getPrincipal(); |
| 200 | + assertThat(deserializedUser.getIdToken().getClaims()) |
| 201 | + .containsKey(IdTokenClaimNames.ISS); |
| 202 | + } |
| 203 | + |
174 | 204 | private static String asJson(OAuth2AuthenticationToken authentication) { |
175 | 205 | String principalJson = (authentication.getPrincipal() instanceof DefaultOidcUser) |
176 | 206 | ? asJson((DefaultOidcUser) authentication.getPrincipal()) |
|
0 commit comments