Skip to content

Commit b728b82

Browse files
Add scopes and aud claim to token
1 parent 405d43a commit b728b82

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.rabbitmq.authorization_server;
2+
3+
import org.springframework.security.core.GrantedAuthority;
4+
5+
public class AudienceAuthority implements GrantedAuthority {
6+
7+
private String authority;
8+
9+
10+
public AudienceAuthority(String value) {
11+
this.authority = value;
12+
}
13+
14+
public static AudienceAuthority aud(String value) {
15+
return new AudienceAuthority(value);
16+
}
17+
18+
@Override
19+
public String getAuthority() {
20+
return authority;
21+
}
22+
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.rabbitmq.authorization_server;
2+
3+
import org.springframework.security.core.GrantedAuthority;
4+
5+
public class ScopeAuthority implements GrantedAuthority {
6+
7+
private String authority;
8+
9+
public ScopeAuthority(String value) {
10+
this.authority = value;
11+
}
12+
13+
public static ScopeAuthority scope(String value) {
14+
return new ScopeAuthority(value);
15+
}
16+
17+
@Override
18+
public String getAuthority() {
19+
return authority;
20+
}
21+
22+
}

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.security.KeyPairGenerator;
55
import java.security.interfaces.RSAPrivateKey;
66
import java.security.interfaces.RSAPublicKey;
7+
import java.util.List;
78
import java.util.UUID;
89

910
import org.springframework.context.annotation.Bean;
@@ -20,13 +21,16 @@
2021
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
2122
import org.springframework.security.oauth2.core.oidc.OidcScopes;
2223
import org.springframework.security.oauth2.jwt.JwtDecoder;
24+
import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
2325
import org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository;
2426
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
2527
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
2628
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
2729
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer;
2830
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
2931
import org.springframework.security.oauth2.server.authorization.settings.ClientSettings;
32+
import org.springframework.security.oauth2.server.authorization.token.JwtEncodingContext;
33+
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenCustomizer;
3034
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
3135
import org.springframework.security.web.SecurityFilterChain;
3236
import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
@@ -38,6 +42,9 @@
3842
import com.nimbusds.jose.jwk.source.JWKSource;
3943
import com.nimbusds.jose.proc.SecurityContext;
4044

45+
import static com.rabbitmq.authorization_server.ScopeAuthority.scope;
46+
import static com.rabbitmq.authorization_server.AudienceAuthority.aud;
47+
4148
@Configuration
4249
@EnableWebSecurity
4350
public class SecurityConfig {
@@ -91,7 +98,11 @@ public UserDetailsService userDetailsService() {
9198
UserDetails userDetails = User.withDefaultPasswordEncoder()
9299
.username("rabbit_admin")
93100
.password("rabbit_admin")
94-
.roles("openid profile rabbitmq.tag:administrator")
101+
.authorities(List.of(
102+
scope("openid"),
103+
scope("profile"),
104+
scope("rabbitmq.tag:administrator"),
105+
aud("rabbitmq")))
95106
.build();
96107

97108
return new InMemoryUserDetailsManager(userDetails);
@@ -141,6 +152,20 @@ private static KeyPair generateRsaKey() {
141152
return keyPair;
142153
}
143154

155+
@Bean
156+
public OAuth2TokenCustomizer<JwtEncodingContext> jwtTokenCustomizer() {
157+
return (context) -> {
158+
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+
});
164+
}
165+
};
166+
}
167+
168+
144169
@Bean
145170
public JwtDecoder jwtDecoder(JWKSource<SecurityContext> jwkSource) {
146171
return OAuth2AuthorizationServerConfiguration.jwtDecoder(jwkSource);

0 commit comments

Comments
 (0)