Skip to content

Commit 098959d

Browse files
Externalize user configuration
1 parent 40a2f68 commit 098959d

File tree

4 files changed

+106
-40
lines changed

4 files changed

+106
-40
lines changed

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

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@
3636
import com.nimbusds.jose.jwk.source.JWKSource;
3737
import com.nimbusds.jose.proc.SecurityContext;
3838

39-
import static com.rabbitmq.authorization_server.ScopeAuthority.scope;
40-
import static com.rabbitmq.authorization_server.AudienceAuthority.aud;
41-
4239
@Configuration
4340
@EnableWebSecurity
4441
public class SecurityConfig {
@@ -88,38 +85,10 @@ public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http)
8885
}
8986

9087
@Bean
91-
public UserDetailsService userDetailsService() {
92-
UserDetails userDetails = User.withDefaultPasswordEncoder()
93-
.username("rabbit_admin")
94-
.password("rabbit_admin")
95-
.authorities(List.of(
96-
scope("openid"),
97-
scope("profile"),
98-
scope("rabbitmq.tag:administrator"),
99-
aud("rabbitmq")))
100-
.build();
101-
102-
return new InMemoryUserDetailsManager(userDetails);
88+
public UserDetailsService userDetailsService(UsersConfiguration users) {
89+
return new InMemoryUserDetailsManager(users.getUserDetails());
10390
}
104-
/*
105-
@Bean
106-
public RegisteredClientRepository registeredClientRepository() {
107-
RegisteredClient oidcClient = RegisteredClient.withId(UUID.randomUUID().toString())
108-
.clientId("oidc-client")
109-
.clientSecret("{noop}secret")
110-
.clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
111-
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
112-
.authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN)
113-
.redirectUri("http://127.0.0.1:8080/login/oauth2/code/oidc-client")
114-
.postLogoutRedirectUri("http://127.0.0.1:8080/")
115-
.scope(OidcScopes.OPENID)
116-
.scope(OidcScopes.PROFILE)
117-
.clientSettings(ClientSettings.builder().requireAuthorizationConsent(true).build())
118-
.build();
11991

120-
return new InMemoryRegisteredClientRepository(oidcClient);
121-
}
122-
*/
12392
@Bean
12493
public JWKSource<SecurityContext> jwkSource() {
12594
KeyPair keyPair = generateRsaKey();

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

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

33
import java.io.IOException;
4-
import java.util.Optional;
5-
import java.util.Set;
6-
74
import org.springframework.beans.factory.annotation.Autowired;
8-
import org.springframework.beans.factory.annotation.Value;
95
import org.springframework.core.Ordered;
106
import org.springframework.core.annotation.Order;
117
import org.springframework.stereotype.Component;
@@ -29,13 +25,12 @@ public SimpleCORSFilter() {
2925

3026
@Override
3127
public void init(FilterConfig fc) throws ServletException {
32-
System.out.println("Init SimpleCORSFilter");
28+
3329
}
3430

3531
@Override
3632
public void doFilter(ServletRequest req, ServletResponse resp,
37-
FilterChain chain) throws IOException, ServletException {
38-
System.out.println("doFilter SimpleCORSFilter");
33+
FilterChain chain) throws IOException, ServletException {
3934
HttpServletResponse response = (HttpServletResponse) resp;
4035
HttpServletRequest request = (HttpServletRequest) req;
4136
response.setHeader("Access-Control-Allow-Origin", "*");
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package com.rabbitmq.authorization_server;
2+
3+
import java.util.List;
4+
import java.util.stream.Stream;
5+
6+
import org.springframework.boot.context.properties.ConfigurationProperties;
7+
import org.springframework.security.core.GrantedAuthority;
8+
import org.springframework.security.core.userdetails.User;
9+
import org.springframework.security.core.userdetails.UserDetails;
10+
import org.springframework.stereotype.Component;
11+
12+
import static com.rabbitmq.authorization_server.AudienceAuthority.aud;
13+
import static com.rabbitmq.authorization_server.ScopeAuthority.scope;
14+
15+
@Component
16+
@ConfigurationProperties(prefix = "spring.security.oauth2")
17+
public class UsersConfiguration {
18+
19+
private List<ConfigUser> users;
20+
21+
public UsersConfiguration() {
22+
}
23+
24+
@Override
25+
public String toString() {
26+
return "UsersConfiguration [users=" + users + "]";
27+
}
28+
29+
public List<UserDetails> getUserDetails() {
30+
return users.stream().map(u ->
31+
User.withDefaultPasswordEncoder()
32+
.username(u.getUsername())
33+
.password(u.getPassword())
34+
.authorities(u.getAuthorities())
35+
.build()).toList();
36+
}
37+
38+
public static class ConfigUser {
39+
40+
private String username;
41+
private String password;
42+
private List<String> scopes;
43+
private List<String> audiencies;
44+
45+
public ConfigUser() {
46+
}
47+
48+
public void setUsername(String username) {
49+
this.username = username;
50+
}
51+
public void setPassword(String password) {
52+
this.password = password;
53+
}
54+
public void setScopes(List<String> scopes) {
55+
this.scopes = scopes;
56+
}
57+
public void setAudiencies(List<String> audiencies) {
58+
this.audiencies = audiencies;
59+
}
60+
public String getUsername() {
61+
return username;
62+
}
63+
public String getPassword() {
64+
return password;
65+
}
66+
public List<String> getScopes() {
67+
return scopes;
68+
}
69+
public List<String> getAudiencies() {
70+
return audiencies;
71+
}
72+
public List<GrantedAuthority> getAuthorities() {
73+
return Stream.concat(scopes.stream().map(s -> scope(s)),
74+
audiencies.stream().map(s -> aud(s))).toList();
75+
}
76+
77+
@Override
78+
public String toString() {
79+
return "User [username=" + username + ", password=" + password + ", scopes=" + scopes + ", audiencies="
80+
+ audiencies + "]";
81+
}
82+
83+
84+
}
85+
86+
public List<ConfigUser> getUsers() {
87+
return users;
88+
}
89+
90+
public void setUsers(List<ConfigUser> users) {
91+
this.users = users;
92+
}
93+
}

selenium/authorization-server/src/main/resources/application.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ spring:
1717
type: PKCS12
1818
security:
1919
oauth2:
20+
users:
21+
- username: rabbit_admin
22+
password: rabbit_admin
23+
scopes:
24+
- openid
25+
- profile
26+
- rabbitmq.tag:administrator
27+
audiencies:
28+
- rabbitmq
2029
authorizationserver:
2130
client:
2231
mgt_api_client:

0 commit comments

Comments
 (0)