Skip to content

Commit af72402

Browse files
Externalize user configuration
1 parent 28eb8f4 commit af72402

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy