|
4 | 4 | import java.security.KeyPairGenerator;
|
5 | 5 | import java.security.interfaces.RSAPrivateKey;
|
6 | 6 | import java.security.interfaces.RSAPublicKey;
|
| 7 | +import java.util.List; |
7 | 8 | import java.util.UUID;
|
8 | 9 |
|
9 | 10 | import org.springframework.context.annotation.Bean;
|
|
20 | 21 | import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
|
21 | 22 | import org.springframework.security.oauth2.core.oidc.OidcScopes;
|
22 | 23 | import org.springframework.security.oauth2.jwt.JwtDecoder;
|
| 24 | +import org.springframework.security.oauth2.server.authorization.OAuth2TokenType; |
23 | 25 | import org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository;
|
24 | 26 | import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
|
25 | 27 | import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
|
26 | 28 | import org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
|
27 | 29 | import org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer;
|
28 | 30 | import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
|
29 | 31 | 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; |
30 | 34 | import org.springframework.security.provisioning.InMemoryUserDetailsManager;
|
31 | 35 | import org.springframework.security.web.SecurityFilterChain;
|
32 | 36 | import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
|
|
38 | 42 | import com.nimbusds.jose.jwk.source.JWKSource;
|
39 | 43 | import com.nimbusds.jose.proc.SecurityContext;
|
40 | 44 |
|
| 45 | +import static com.rabbitmq.authorization_server.ScopeAuthority.scope; |
| 46 | +import static com.rabbitmq.authorization_server.AudienceAuthority.aud; |
| 47 | + |
41 | 48 | @Configuration
|
42 | 49 | @EnableWebSecurity
|
43 | 50 | public class SecurityConfig {
|
@@ -91,7 +98,11 @@ public UserDetailsService userDetailsService() {
|
91 | 98 | UserDetails userDetails = User.withDefaultPasswordEncoder()
|
92 | 99 | .username("rabbit_admin")
|
93 | 100 | .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"))) |
95 | 106 | .build();
|
96 | 107 |
|
97 | 108 | return new InMemoryUserDetailsManager(userDetails);
|
@@ -141,6 +152,20 @@ private static KeyPair generateRsaKey() {
|
141 | 152 | return keyPair;
|
142 | 153 | }
|
143 | 154 |
|
| 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 | + |
144 | 169 | @Bean
|
145 | 170 | public JwtDecoder jwtDecoder(JWKSource<SecurityContext> jwkSource) {
|
146 | 171 | return OAuth2AuthorizationServerConfiguration.jwtDecoder(jwkSource);
|
|
0 commit comments