使用 Spring Security 的 OAuth 2.0 中的 resourceId 是啥意思

Posted

技术标签:

【中文标题】使用 Spring Security 的 OAuth 2.0 中的 resourceId 是啥意思【英文标题】:What does resourceId mean in OAuth 2.0 with Spring Security使用 Spring Security 的 OAuth 2.0 中的 resourceId 是什么意思 【发布时间】:2012-01-25 19:18:24 【问题描述】:

org.springframework.security.oauth2.provider.filter 中的OAuth2ProtectedResourceFilter:

Collection<String> resourceIds = auth.getClientAuthentication().getResourceIds();
if (resourceIds!=null && !resourceIds.isEmpty() && !resourceIds.contains(resourceId)) 
    throw new InvalidTokenException("Invalid token does not contain resource id ("+resourceId+"): " + token);                   

我认为它没有用。这段代码检查什么?

【问题讨论】:

【参考方案1】:

根据我收集到的信息,它是资源服务的 id。

当您考虑将 oauth 令牌提供程序 servlet 和资源服务器分开以进行 api 版本控制时,这一点会变得更加清晰。例如,假设客户端 A (cA) 可以访问 api1,而客户端 B (cB) 可以访问 api2,您可以通过在 api1 的资源服务器 xml 中指定其 resource-id=api1 来强制执行此访问,然后配置您的客户端详细信息对于 cA,它们具有 resourceIds="api1",对于 [cB,api2] 也是如此。

这让我们可以保护 api 访问并将其保护声明与我们的客户端角色声明分开。

【讨论】:

resourceIds 与范围有何不同? @yankee 如果我没记错的话,范围是指对给定资源的访问类型。例子是读,写【参考方案2】:

它看起来像是检查客户端是否有权查看特定资源。不确定令牌变量是如何涉及的,看起来有一些您没有显示的更相关的代码。

【讨论】:

以上是关于使用 Spring Security 的 OAuth 2.0 中的 resourceId 是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

在没有 servlet api 的 webflux 项目中使用 OAuth2 和 Spring Security OAuth2 和 reactor netty

具有密码授予类型的 WebClient 的 Spring Security OAuth 客户端不要求新令牌

获取'无法在grails Spring安全性休息中调用null对象上的方法loadUserByUsername()'

Oaut2RestTemplate 与 client_credentials 错误(不允许匿名)

Spring Framework,Spring Security - 可以在没有 Spring Framework 的情况下使用 Spring Security?

仅使用 Spring-Security(或)Spring 进行授权