Spring Security 5 OAuth 2.0 ResourceServer 如何与 AuthorizationServer 通信?

Posted

技术标签:

【中文标题】Spring Security 5 OAuth 2.0 ResourceServer 如何与 AuthorizationServer 通信?【英文标题】:Spring Security 5 OAuth 2.0 How does ResourceServer communicate with the AuthorizationServer? 【发布时间】:2019-02-01 14:08:01 【问题描述】:

我目前正在我公司开发一个内部项目,该项目使用基于角色访问的授权,使用带有 OAuth2 和 JWT 的 Spring Security。

我设法开发了 AuthorizationServer,它只返回一个带有我的自定义声明的访问令牌。

我还已经能够创建能够解码访问令牌以验证用户角色和访问权限的 ResourceServer。

我一直在关注 RFC 6749 OAuth 2.0 授权框架。 它显示了这样的图表: access and refresh token protocol flow

我的问题是 ResourceServer 如何与 AuthorizationServer 通信以验证访问令牌是否仍然有效?

the questioned flow i had in mind

我研究了这个问题的答案,发现 ResourceServer 在安全过滤器链中验证了令牌本身,这完全正确吗?关于 ResourceServer 如何验证令牌有什么答案吗? ResourceServer 是否在请求 ResourceServer 端点时验证所有令牌? 如果我们想手动触发或验证token,有什么办法吗?

【问题讨论】:

【参考方案1】:

对于任何寻求启蒙的人,这里是解释。

问题 1(Q1): ResourceServer 如何与 AuthorizationServer 通信以验证访问令牌是否仍然有效?

问题 1 的答案: 因此,从某种意义上说,我们在身份验证和授权过程中使用了非对称密钥(私钥-公钥),我们将公钥共享给我们的资源服务器,并将私钥保存在我们的授权服务器中。 我们这样做是为了达到 Authorization 和 Resource Server 分离的目的。如果令牌是从持有正确私钥对的授权服务器创建的,则可以验证带有令牌到达资源端点的任何请求时,使用资源服务器中的公钥。

问题 2 (Q2):“我研究了这个问题的答案,发现 ResourceServer 在安全范围内验证了令牌本身 过滤器链,这完全是真的吗?”

对Q2的回答:如果使用的JWT令牌具有无效签名,则在某种程度上是正确的,令牌无法转换为JSON,因此资源服务器将抛出无效令牌错误。

问题 3(Q3):有没有关于 ResourceServer 如何验证令牌的答案?

对 Q3 的回答:这个答案与 Q2 有关,这是我目前唯一的线索。

问题 4(Q4):当 ResourceServer 端点被请求时,ResourceServer 是否验证所有令牌?

对 Q4 的回答:是的,如果您添加 @EnableResourceServer 注释并正确配置端点。

问题 5(Q5):如果我们想手动触发或验证令牌怎么办,有什么办法吗?

对 Q5 的回答:仍然没有找到任何线索。

【讨论】:

以上是关于Spring Security 5 OAuth 2.0 ResourceServer 如何与 AuthorizationServer 通信?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 5 OAuth 2 社交注销

Spring Security 5 OAuth 2.0 ResourceServer 如何与 AuthorizationServer 通信?

配置 Spring Security 5 Oauth 2 以使用 access_token uri 参数

在 Spring Security 5 OAuth Client 和 Spring Boot 2.0 中,authorizationGrantType 不能为空

找不到带有 Spring Security 5.3.2 ReactiveClientRegistrationRepository bean 的反应式 OAuth2

使用 Spring Security 5 OAuth2 实现 Keyclock 授权服务器