Skip to content

Commit 846e91f

Browse files
Add extra scopes and audience to token
1 parent b728b82 commit 846e91f

File tree

5 files changed

+29
-59
lines changed

5 files changed

+29
-59
lines changed

selenium/authorization-server/src/main/java/com/rabbitmq/authorization_server/AudienceAuthority.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.rabbitmq.authorization_server;
22

3+
import org.springframework.security.authentication.AbstractAuthenticationToken;
4+
import java.util.List;
5+
36
import org.springframework.security.core.GrantedAuthority;
47

58
public class AudienceAuthority implements GrantedAuthority {
@@ -20,4 +23,10 @@ public String getAuthority() {
2023
return authority;
2124
}
2225

26+
public static List<String> getAll(AbstractAuthenticationToken principal) {
27+
return principal.getAuthorities()
28+
.stream().filter(a -> a instanceof AudienceAuthority)
29+
.map(a -> a.getAuthority()).toList();
30+
}
31+
2332
}

selenium/authorization-server/src/main/java/com/rabbitmq/authorization_server/AuthorizationServerUserDetailsService.java

Lines changed: 0 additions & 47 deletions
This file was deleted.

selenium/authorization-server/src/main/java/com/rabbitmq/authorization_server/ScopeAuthority.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package com.rabbitmq.authorization_server;
22

3+
import java.util.List;
4+
import java.util.Set;
5+
6+
import org.springframework.security.authentication.AbstractAuthenticationToken;
37
import org.springframework.security.core.GrantedAuthority;
48

59
public class ScopeAuthority implements GrantedAuthority {
@@ -18,5 +22,14 @@ public static ScopeAuthority scope(String value) {
1822
public String getAuthority() {
1923
return authority;
2024
}
25+
26+
public static List<String> getAllUnauthorized(AbstractAuthenticationToken principal,
27+
Set<String> authorized) {
28+
return principal.getAuthorities()
29+
.stream()
30+
.filter(a -> a instanceof ScopeAuthority)
31+
.filter(a -> !authorized.contains(a.getAuthority()))
32+
.map(a -> a.getAuthority()).toList();
33+
}
2134

2235
}

selenium/authorization-server/src/main/java/com/rabbitmq/authorization_server/SecurityConfig.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,18 @@
1111
import org.springframework.context.annotation.Configuration;
1212
import org.springframework.core.annotation.Order;
1313
import org.springframework.http.MediaType;
14+
import org.springframework.security.authentication.AbstractAuthenticationToken;
1415
import org.springframework.security.config.Customizer;
1516
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
1617
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
1718
import org.springframework.security.core.userdetails.User;
1819
import org.springframework.security.core.userdetails.UserDetails;
1920
import org.springframework.security.core.userdetails.UserDetailsService;
20-
import org.springframework.security.oauth2.core.AuthorizationGrantType;
21-
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
22-
import org.springframework.security.oauth2.core.oidc.OidcScopes;
2321
import org.springframework.security.oauth2.jwt.JwtDecoder;
2422
import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
25-
import org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository;
26-
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
27-
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
2823
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
2924
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer;
3025
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
31-
import org.springframework.security.oauth2.server.authorization.settings.ClientSettings;
3226
import org.springframework.security.oauth2.server.authorization.token.JwtEncodingContext;
3327
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenCustomizer;
3428
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@@ -156,11 +150,11 @@ private static KeyPair generateRsaKey() {
156150
public OAuth2TokenCustomizer<JwtEncodingContext> jwtTokenCustomizer() {
157151
return (context) -> {
158152
if (OAuth2TokenType.ACCESS_TOKEN.equals(context.getTokenType())) {
159-
System.out.println("Principal: " + context.getPrincipal());
160-
System.out.println("Authorized scopes: " + context.getAuthorizedScopes());
161-
context.getClaims().claims((claims) -> {
162-
claims.put("aud", "rabbitmq");
163-
});
153+
AbstractAuthenticationToken principal = context.getPrincipal();
154+
context.getClaims()
155+
.audience(AudienceAuthority.getAll(principal))
156+
.claim("extra_scope", ScopeAuthority.getAllUnauthorized(principal,
157+
context.getAuthorizedScopes()));
164158
}
165159
};
166160
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
auth_oauth2.issuer = ${SPRING_URL}
22
auth_oauth2.https.cacertfile = ${SPRING_CA_CERT}
3+
auth_oauth2.additional_scopes_key = extra_scope

0 commit comments

Comments
 (0)