在我的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
我当前的登录网址:
在我的Spring OAuth2服务器(使用JWT令牌)中,我配置了多个客户端 - clientapp1
,clientapp2
,clientapp3
@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.com
和clientapp1
我需要以下行为:
来自domain1.com
的REST API调用必须仅允许OAuth2 JWT令牌仅包含clientapp1
,domain2.com
仅限clientapp2
,依此类推。
如何配置我的应用程序,以便只能为适当的域名登录具有正确clientId
的用户?
在客户端(用户浏览器中)存储和直接使用clientId
值是否安全?
另外,如果我的方法有误 - 请建议如何使用OAuth2正确实现多租户。