15
15
*/
16
16
package org .springframework .security .oauth2 .server .resource .authentication ;
17
17
18
- import java .time .Instant ;
19
18
import java .util .Collection ;
20
- import java .util .Collections ;
21
19
import java .util .Map ;
22
- import java .util .Optional ;
23
- import java .util .stream .Collectors ;
24
20
21
+ import org .springframework .core .convert .converter .Converter ;
25
22
import org .springframework .http .HttpStatus ;
26
23
import org .springframework .security .authentication .AbstractAuthenticationToken ;
27
24
import org .springframework .security .authentication .AuthenticationProvider ;
28
25
import org .springframework .security .core .Authentication ;
29
26
import org .springframework .security .core .AuthenticationException ;
30
27
import org .springframework .security .core .GrantedAuthority ;
31
- import org .springframework .security .core .authority .SimpleGrantedAuthority ;
32
- import org .springframework .security .oauth2 .core .OAuth2AccessToken ;
33
28
import org .springframework .security .oauth2 .core .OAuth2AuthenticationException ;
34
29
import org .springframework .security .oauth2 .core .OAuth2Error ;
35
30
import org .springframework .security .oauth2 .core .OAuth2TokenAttributes ;
36
- import org .springframework .security .oauth2 .server .resource .introspection .OAuth2IntrospectionException ;
37
- import org .springframework .security .oauth2 .server .resource .introspection .OAuth2TokenIntrospectionClient ;
38
31
import org .springframework .security .oauth2 .server .resource .BearerTokenAuthenticationToken ;
39
32
import org .springframework .security .oauth2 .server .resource .BearerTokenError ;
33
+ import org .springframework .security .oauth2 .server .resource .introspection .OAuth2IntrospectionException ;
34
+ import org .springframework .security .oauth2 .server .resource .introspection .OAuth2TokenIntrospectionClient ;
40
35
import org .springframework .util .Assert ;
41
36
42
- import static org .springframework .security .oauth2 .server .resource .introspection .OAuth2IntrospectionClaimNames .EXPIRES_AT ;
43
- import static org .springframework .security .oauth2 .server .resource .introspection .OAuth2IntrospectionClaimNames .ISSUED_AT ;
44
- import static org .springframework .security .oauth2 .server .resource .introspection .OAuth2IntrospectionClaimNames .SCOPE ;
45
-
46
37
/**
47
38
* An {@link AuthenticationProvider} implementation for opaque
48
39
* <a href="https://tools.ietf.org/html/rfc6750#section-1.2" target="_blank">Bearer Token</a>s,
@@ -70,6 +61,8 @@ public final class OAuth2IntrospectionAuthenticationProvider implements Authenti
70
61
invalidToken ("An error occurred while attempting to introspect the token: Invalid token" );
71
62
72
63
private OAuth2TokenIntrospectionClient introspectionClient ;
64
+ private Converter <OAuth2TokenAttributes , ? extends AbstractAuthenticationToken > tokenAttributesAuthenticationConverter =
65
+ new OAuth2TokenAttributesAuthenticationConverter ();
73
66
74
67
/**
75
68
* Creates a {@code OAuth2IntrospectionAuthenticationProvider} with the provided parameters
@@ -110,6 +103,11 @@ public Authentication authenticate(Authentication authentication) throws Authent
110
103
return result ;
111
104
}
112
105
106
+ public void setTokenAttributesAuthenticationConverter
107
+ (Converter <OAuth2TokenAttributes , ? extends AbstractAuthenticationToken > tokenAttributesAuthenticationConverter ) {
108
+ this .tokenAttributesAuthenticationConverter = tokenAttributesAuthenticationConverter ;
109
+ }
110
+
113
111
/**
114
112
* {@inheritDoc}
115
113
*/
@@ -119,20 +117,7 @@ public boolean supports(Class<?> authentication) {
119
117
}
120
118
121
119
private AbstractAuthenticationToken convert (String token , Map <String , Object > claims ) {
122
- Instant iat = (Instant ) claims .get (ISSUED_AT );
123
- Instant exp = (Instant ) claims .get (EXPIRES_AT );
124
- OAuth2AccessToken accessToken = new OAuth2AccessToken (OAuth2AccessToken .TokenType .BEARER ,
125
- token , iat , exp );
126
- Collection <GrantedAuthority > authorities = extractAuthorities (claims );
127
- return new OAuth2IntrospectionAuthenticationToken (accessToken , new OAuth2TokenAttributes (claims ), authorities );
128
- }
129
-
130
- private Collection <GrantedAuthority > extractAuthorities (Map <String , Object > claims ) {
131
- Collection <String > scopes = (Collection <String >) claims .get (SCOPE );
132
- return Optional .ofNullable (scopes ).orElse (Collections .emptyList ())
133
- .stream ()
134
- .map (authority -> new SimpleGrantedAuthority ("SCOPE_" + authority ))
135
- .collect (Collectors .toList ());
120
+ return this .tokenAttributesAuthenticationConverter .convert (new OAuth2TokenAttributes (token , claims ));
136
121
}
137
122
138
123
private static BearerTokenError invalidToken (String message ) {
0 commit comments