基于clientId的Spring OAuth2(JWT令牌)多租户

时间:2016-10-25 08:15:55

标签: spring spring-security multi-tenant spring-security-oauth2 oauth2

在我的Spring Boot应用程序中,我有一个暴露REST API的后端应用程序。

我将从不同的客户端应用程序中使用此API(例如,使用AngularJS编写)。

基于不同的OAuth2 clientId我想允许或限制用户访问不同的功能或数据,如何在我之前的问题中描述Spring OAuth 2 + Spring Data Neo4j multi-tenancy

例如,我有3个不同的网域:

example1.com
example2.com
example3.com

对于域example1.com,我想仅允许用户使用clientapp1

进行登录

我当前的登录网址:

http://localhost:8080/oauth/authorize?response_type=token&client_id=clientapp1&redirect_uri=http%3A%2F%2Flocalhost%3A8080

在我的Spring OAuth2服务器(使用JWT令牌)中,我配置了多个客户端 - clientapp1clientapp2clientapp3

@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        // @formatter:off
        clients
            .inMemory()
                .withClient("clientapp1")
                    .authorizedGrantTypes("password","refresh_token")
                    .authorities("ROLE_CLIENT")
                    .scopes("read", "write")
                    .resourceIds(RESOURCE_ID)
                    .secret("123456")
                .and()
                .withClient("clientapp2")
                    .authorizedGrantTypes("implicit")
                    .scopes("read", "write")
                    .autoApprove(true)
                .and()
                .withClient("clientapp3")
                    .authorizedGrantTypes("password", "authorization_code", "refresh_token", "implicit")
                    .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
                    .scopes("read", "write", "trust")
                    .accessTokenValiditySeconds(60);
        // @formatter:on
    }

}

问题是,现在系统中的任何用户都可以使用任何clientId登录到应用程序,因此可以使用例如domain3.comclientapp1

我需要以下行为:

来自domain1.com的REST API调用必须仅允许OAuth2 JWT令牌仅包含clientapp1domain2.com仅限clientapp2,依此类推。

如何配置我的应用程序,以便只能为适当的域名登录具有正确clientId的用户?

在客户端(用户浏览器中)存储和直接使用clientId值是否安全?

另外,如果我的方法有误 - 请建议如何使用OAuth2正确实现多租户。

0 个答案:

没有答案