Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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 OAuth支持多个资源ID_Java_Spring_Oauth 2.0_Jwt_Azure Active Directory - Fatal编程技术网

Java 使用Spring OAuth支持多个资源ID

Java 使用Spring OAuth支持多个资源ID,java,spring,oauth-2.0,jwt,azure-active-directory,Java,Spring,Oauth 2.0,Jwt,Azure Active Directory,情况。我们正在使用SpringOAuth验证安全令牌(JWT)。令牌具有特定资源ID的aud声明。以下代码正确验证使用包含客户端ID的aud声明签名的任何JWT令牌resourceId-123: class ResourceServerConfig{ @豆子 受保护的ResourceServerConfiguration adminResources2(){ ResourceServerConfiguration resource=新的ResourceServerConfiguration(){

情况。我们正在使用SpringOAuth验证安全令牌(JWT)。令牌具有特定资源ID的
aud
声明。以下代码正确验证使用包含客户端ID的aud声明签名的任何JWT令牌
resourceId-123

class ResourceServerConfig{
@豆子
受保护的ResourceServerConfiguration adminResources2(){
ResourceServerConfiguration resource=新的ResourceServerConfiguration(){
无效设置配置程序(列表配置程序){
super.setConfigurers(配置器)
}
}
resource.setConfigurers(Collections.singletonList)(新的ResourceServerConfigurerAdapter(){
@凌驾
void configure(ResourceServerSecurityConfigure资源)引发异常{
resources.resourceId(“resourceId-123”)
}
@凌驾
无效配置(HttpSecurity http)引发异常{
http.antMatcher(“/path”)
.授权请求()
.anyRequest().authenticated()
}
}))
资源.设置顺序(3)
返回资源
}
}

问题。我们如何支持同一路径的多个客户端ID(在上面的示例中,
/path
)?我已经看到了如何为不同的API路径配置具有不同客户机ID的多个bean的示例,但我希望使用2+客户机ID来保护此资源。有关于如何做到这一点的示例或文档吗?还是我们试图做一些根本不正确的事情?

我认为你做得不对

客户端ID与Spring Security中的访问群体不同,而是允许一个客户端使用一个或多个资源ID,JWT可能包含多个访问群体

因此,我认为您应该遵循这样一个示例,即对于不同的路径有不同的资源ID,为共享路径创建一个新的资源ID,并添加到所有允许访问它的客户端

例如:

路径:

|----------------+-------------|
| Path           | Resource ID |
|----------------+-------------|
| /client1/info  | client1     |
| /client2/info  | client2     |
| /shared/status | all-clients |
|----------------+-------------|
客户:

|---------+----------------------|
| Client  | Resource IDs         |
|---------+----------------------|
| client1 | client1, all-clients |
| client2 | client2, all-clients |
|---------+----------------------|
如果你能提供一个我可以修改的可运行的示例,那么展示一些东西会更容易,但是由于你发布的代码数量有限,这是我能做的最好的了


另一种方法是使用不同的范围,而不是不同的受众。这将消除对多资源服务器配置的需要,您可以在
.access()
@PreAuthorize

中使用类似于
#oauth2.hasScope('admin')
的表达式。我可以知道为什么您需要多个客户端应用程序吗?您的web应用会被来自不同租户的用户使用吗?@JackJia目前,我们只需要支持来自单个租户的用户。这听起来很奇怪。一个API不应该有多个客户端ID。谢谢@juunas-你知道这是Microsoft特有的身份验证方式,还是OAuth标准?你检查过过滤器/拦截器了吗?