Java 使用ClientDetailsUserDetailsService加载ClientDetails的Spring引导
我目前正在用SpringBoot2实现一个身份验证流,这将允许Oauth和基本身份验证流 我想使用OAuth表来帮助身份验证将客户机ID与客户机机密进行匹配。(我已经读到,这是Spring中的默认行为,Java 使用ClientDetailsUserDetailsService加载ClientDetails的Spring引导,java,spring,spring-boot,spring-security,Java,Spring,Spring Boot,Spring Security,我目前正在用SpringBoot2实现一个身份验证流,这将允许Oauth和基本身份验证流 我想使用OAuth表来帮助身份验证将客户机ID与客户机机密进行匹配。(我已经读到,这是Spring中的默认行为,ClientDetailsUserDetailsService显然是以这种方式实现的 下面反映了我目前在我的应用程序中使用的两种配置之一(缺少的配置是OAuth特有的) 我目前得到: 说明: Field clientDetailsService in com.mydomain.core.Appli
ClientDetailsUserDetailsService
显然是以这种方式实现的
下面反映了我目前在我的应用程序中使用的两种配置之一(缺少的配置是OAuth特有的)
我目前得到:
说明:
Field clientDetailsService in com.mydomain.core.Application$BasicAuthConfigurationAdapter required a bean of type 'org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
想知道如何注入这个类(我认为将它构建为一个Bean是前进的方向?),以及这是否是针对数据库进行身份验证的正确方法(clientid和secret)
我们已按如下方式配置ClientDetails服务:
@配置
@EnableAuthorizationServer
类OAuth2Configuration扩展了AuthorizationServerConfigurerAdapter{
//TODO:通过clientDetails服务配置客户端
@凌驾
公共无效配置(ClientDetailsServiceConfigurer客户端)引发异常{
ClientDetailsService jdbcClientDetailsServiceBuilder=clients.jdbc(dataSource.build();
试一试{
jdbcClientDetailsServiceBuilder.loadClientByClientId(sClientName);
}捕获(NoSuchClientException NoSuchClientException){
错误(“消息={捕获的异常{}}”,noSuchClientException.getMessage(),noSuchClientException);
//@formatter:off
clients.jdbc(数据源).passwordEncoder(passwordEncoder).withClient(sServiceClientName)
.authorizedGrantTypes(syntheticsServiceClientGrantTypes)。权限(sConstants.ROLE_用户)
.scopes(s.OAUTH2_WRITE_SCOPE).resourceID(OAUTH2_DEFAULT_RESOURCE_ID)
.机密(sServiceClientSecret);
//@formatter:on
}捕获(例外e){
error(“message={捕获的异常{}}”,e.getMessage(),e);
}
}
}
我们已按如下方式配置ClientDetails服务:
@配置
@EnableAuthorizationServer
类OAuth2Configuration扩展了AuthorizationServerConfigurerAdapter{
//TODO:通过clientDetails服务配置客户端
@凌驾
公共无效配置(ClientDetailsServiceConfigurer客户端)引发异常{
ClientDetailsService jdbcClientDetailsServiceBuilder=clients.jdbc(dataSource.build();
试一试{
jdbcClientDetailsServiceBuilder.loadClientByClientId(sClientName);
}捕获(NoSuchClientException NoSuchClientException){
错误(“消息={捕获的异常{}}”,noSuchClientException.getMessage(),noSuchClientException);
//@formatter:off
clients.jdbc(数据源).passwordEncoder(passwordEncoder).withClient(sServiceClientName)
.authorizedGrantTypes(syntheticsServiceClientGrantTypes)。权限(sConstants.ROLE_用户)
.scopes(s.OAUTH2_WRITE_SCOPE).resourceID(OAUTH2_DEFAULT_RESOURCE_ID)
.机密(sServiceClientSecret);
//@formatter:on
}捕获(例外e){
error(“message={捕获的异常{}}”,e.getMessage(),e);
}
}
}
@Order( 1 )
@Configuration
@Profile( "!test" )
public static class BasicAuthConfigurationAdapter extends WebSecurityConfigurerAdapter
{
@Autowired
private ClientDetailsUserDetailsService clientDetailsService;
@Bean
public AuthenticationManager customAuthenticationManager() throws Exception
{
return authenticationManager();
}
@Override
public void configure( HttpSecurity http ) throws Exception
{
http
.authorizeRequests()
.antMatchers( "/dummy/**" ).hasAnyRole( "ADMIN", "USER" )
.anyRequest()
.authenticated()
.and().httpBasic();
}
@Autowired
public void configAuthentication( AuthenticationManagerBuilder auth ) throws Exception
{
auth.parentAuthenticationManager( authenticationManagerBean() ).userDetailsService( clientDetailsService );
}
}