|
22 | 22 | import org.springframework.security.authentication.AbstractAuthenticationToken;
|
23 | 23 | import org.springframework.security.core.GrantedAuthority;
|
24 | 24 | import org.springframework.security.oauth2.jwt.Jwt;
|
| 25 | +import org.springframework.security.oauth2.jwt.JwtClaimNames; |
25 | 26 | import org.springframework.util.Assert;
|
26 | 27 |
|
27 | 28 | /**
|
28 | 29 | * @author Rob Winch
|
29 | 30 | * @author Josh Cummings
|
| 31 | + * @author Evgeniy Cheban |
30 | 32 | * @since 5.1
|
31 | 33 | */
|
32 | 34 | public class JwtAuthenticationConverter implements Converter<Jwt, AbstractAuthenticationToken> {
|
33 | 35 | private Converter<Jwt, Collection<GrantedAuthority>> jwtGrantedAuthoritiesConverter
|
34 | 36 | = new JwtGrantedAuthoritiesConverter();
|
35 | 37 |
|
| 38 | + private String principalClaimName; |
| 39 | + |
36 | 40 | @Override
|
37 | 41 | public final AbstractAuthenticationToken convert(Jwt jwt) {
|
38 | 42 | Collection<GrantedAuthority> authorities = extractAuthorities(jwt);
|
39 |
| - return new JwtAuthenticationToken(jwt, authorities); |
| 43 | + if (this.principalClaimName == null) { |
| 44 | + return new JwtAuthenticationToken(jwt, authorities); |
| 45 | + } |
| 46 | + |
| 47 | + String name = jwt.getClaim(this.principalClaimName); |
| 48 | + return new JwtAuthenticationToken(jwt, authorities, name); |
40 | 49 | }
|
41 | 50 |
|
42 | 51 | /**
|
@@ -65,4 +74,16 @@ public void setJwtGrantedAuthoritiesConverter(Converter<Jwt, Collection<GrantedA
|
65 | 74 | Assert.notNull(jwtGrantedAuthoritiesConverter, "jwtGrantedAuthoritiesConverter cannot be null");
|
66 | 75 | this.jwtGrantedAuthoritiesConverter = jwtGrantedAuthoritiesConverter;
|
67 | 76 | }
|
| 77 | + |
| 78 | + /** |
| 79 | + * Sets the principal claim name. |
| 80 | + * Defaults to {@link JwtClaimNames#SUB}. |
| 81 | + * |
| 82 | + * @param principalClaimName The principal claim name |
| 83 | + * @since 5.4 |
| 84 | + */ |
| 85 | + public void setPrincipalClaimName(String principalClaimName) { |
| 86 | + Assert.hasText(principalClaimName, "principalClaimName cannot be empty"); |
| 87 | + this.principalClaimName = principalClaimName; |
| 88 | + } |
68 | 89 | }
|
0 commit comments