Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring OAuth2限制用户通过客户端进行身份验证_Java_Spring_Security_Oauth 2.0 - Fatal编程技术网

Java Spring OAuth2限制用户通过客户端进行身份验证

Java Spring OAuth2限制用户通过客户端进行身份验证,java,spring,security,oauth-2.0,Java,Spring,Security,Oauth 2.0,我正在实现一个SpringOAuth2应用程序,其中我有使用资源的不同客户端 客户端是移动应用程序,所以我使用资源所有者密码流 在我的应用程序中有两个角色:普通用户和管理员。分别有2个客户端,一个用于普通用户,一个用于管理员 我不想在移动应用程序(客户端)上应用逻辑来检查用户是否具有访问应用程序所需的角色。据我所知,令牌对客户端应该是不透明的 我已经用用户角色限制了资源,但是我不希望auth服务器在用户不应该使用客户端时向客户端提供访问代码 如何限制某些客户端上某些用户的授权 提前谢谢 oaut

我正在实现一个SpringOAuth2应用程序,其中我有使用资源的不同客户端

客户端是移动应用程序,所以我使用资源所有者密码流

在我的应用程序中有两个角色:普通用户和管理员。分别有2个客户端,一个用于普通用户,一个用于管理员

我不想在移动应用程序(客户端)上应用逻辑来检查用户是否具有访问应用程序所需的角色。据我所知,令牌对客户端应该是不透明的

我已经用用户角色限制了资源,但是我不希望auth服务器在用户不应该使用客户端时向客户端提供访问代码

如何限制某些客户端上某些用户的授权

提前谢谢

oauth配置:

@SpringBootApplication
public class Application {

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}

@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        resources.resourceId(RESOURCE_ID);
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().access("#oauth2.clientHasRole('ROLE_MANAGER') and hasRole('ROLE_MANAGER')");
    }

}

@Configuration
@EnableWebSecurity
protected static class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user").password("password").roles("USER")
            .and()
                .withUser("demo").password("password").roles("USER")
            .and()
                .withUser("manager").password("password").roles("MANAGER");
    }

    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
}


@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    @Autowired
    @Qualifier("authenticationManagerBean")
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
            .withClient("manager-client")
                .authorizedGrantTypes("password", "refresh_token")
                .authorities("ROLE_MANAGER")
                .scopes("trust")
                .resourceIds(RESOURCE_ID);
    }
}
}

您使用什么连接到Oauth服务器?请求令牌时只需指定授权类型,如果尝试授权的客户端的授权类型与Oauth服务器上为客户端指定的授权类型不匹配,则不会授予令牌。授权类型不匹配时将不会完成授权。我使用授权类型密码。问题不在于授权客户。我只需要限制没有特定角色的用户连接到客户端如何在
ClientDetailsServiceBuilder
上设置
.authorities(“角色”)
,如果您显示了oauth配置,您对该问题的兴趣可能会变得很简单。我用oauth配置编辑了这个问题。我知道来自auth服务器的这个请求超出了oauth2规范的范围。我想如果我想实现这个,我需要在框架中重写.getOAuth2Authentication。但该类不是spring管理的bean。