|
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