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