I have successfully set up a JWT resource server that retrieves User information from a database.
Now, I need a alternative way of authentication (preferably using Basic Auth and In-Memory Users) to create a default application user, so I can create the database Users.
This is what I tried so far:
Authorization Server Config:
@Configuration
public class AuthorizationServerConfig {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SecurityFilterChain oauthServerSecurityFilterChain(HttpSecurity http) throws Exception {
OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
return http.build();
}
@Bean
public AuthorizationServerSettings oauthServerSettings() {
return AuthorizationServerSettings.builder().build();
}
}
Resource Server Config:
@EnableMethodSecurity
@Configuration
@RequiredArgsConstructor
public class ResourceServerConfig {
private final UserAuthenticationTokenConverter userAuthenticationTokenConverter;
private final InMemoryUserDetailsManager inMemoryUserDetailsManager;
@Bean
public SecurityFilterChain resourceServerSecurityFilterChain(HttpSecurity http) throws Exception {
http.oauth2ResourceServer(customizer ->
customizer.jwt( jwt ->
jwt.jwtAuthenticationConverter(userAuthenticationTokenConverter)
)
).userDetailsService(inMemoryUserDetailsManager);
return http.build();
}
}
InMemoryUserDetailsManager Config:
@Configuration
@RequiredArgsConstructor
public class InMemoryUserPropertiesConfig {
private final BasicUsersProperties basicUsersProperties;
@Bean
public InMemoryUserDetailsManager userDetailsManager() {
List<UserDetails> users = basicUsersProperties.getUsers().stream()
.map(PropertiesUserDetails::new)
.collect(Collectors.toList());
return new InMemoryUserDetailsManager(users);
}
}
The InMemoryUserDetails is loading the users correctly, but it don't seems to be used during authentication.