Oauth 2.0 spring boot OAuth2基于角色的授权

Oauth 2.0 spring boot OAuth2基于角色的授权,oauth-2.0,spring-boot,spring-security-oauth2,spring-oauth2,Oauth 2.0,Spring Boot,Spring Security Oauth2,Spring Oauth2,我们有一个扩展AuthorizationServerConfigurerAdapter的专用授权服务器,其中我们设置了覆盖void configure(ClientDetailsServiceConfigurer客户端)方法的权限 现在了解如何使用资源服务器中的权限进行基于角色的授权。 我们能够通过授权服务器生成的令牌进行身份验证。 需要帮助。在资源服务器中,您应该扩展ResourceServerConfigurerAdapter以配置请求匹配器并为每个资源设置角色 @Configuration

我们有一个扩展AuthorizationServerConfigurerAdapter的专用授权服务器,其中我们设置了覆盖void configure(ClientDetailsServiceConfigurer客户端)方法的权限

现在了解如何使用资源服务器中的权限进行基于角色的授权。 我们能够通过授权服务器生成的令牌进行身份验证。
需要帮助。

在资源服务器中,您应该扩展ResourceServerConfigurerAdapter以配置请求匹配器并为每个资源设置角色

@Configuration
@EnableResourceServer
public class OAuth2Config extends ResourceServerConfigurerAdapter {

    @Value("${keys.public}")
    private String publicKey;

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .requestMatchers()
                .antMatchers("/**")
                .and()
                .authorizeRequests()
                .antMatchers("/service1/**").access("#oauth2.hasScope('ADMIN')")
                .antMatchers("/service2/**").access("#oauth2.hasScope('USER')");
    }

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.tokenStore(tokenStore());
    }

    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(jwtAccessTokenConverter());
    }

    @Bean
    public JwtAccessTokenConverter jwtAccessTokenConverter() {
        JwtAccessTokenConverter tokenConverter = new JwtAccessTokenConverter();
        tokenConverter.setVerifierKey(publicKey);
        return tokenConverter;
    }
}

您已从身份验证服务器收到令牌。现在,您可以使用该令牌向身份验证服务器发出另一个请求,以检索用户对象。此json对象将包含角色(权限)。 请求如下所示

    curl -H "Authorization: Bearer 2a953581-e9c9-4278-b42e-8af925f49a99"  
    http://localhost:9999/uaa/user
为此,您需要创建用户服务端点并实现UserDetailsService

    @RequestMapping("/user")
public Principal user(Principal user) {
    return user;
}
    @Bean
     UserDetailsService userDetailsService.....
角色列表在UserDetailsService.User中的org.springframework.security.core.userDetails中创建和设置,如下所示

AuthorityUtils.createAuthorityList("ROLE_USER", "ROLE_ADMIN"));

我认为它将与
#oauth2.clientHasRole('ADMIN')
一起工作。这对我有用
AuthorityUtils.createAuthorityList("ROLE_USER", "ROLE_ADMIN"));