Spring OAuth 2授权服务器应用程序与另一个应用程序共享相同的安全上下文

时间:2018-10-23 13:37:49

标签: spring spring-boot spring-security spring-security-oauth2

我有两个授权服务器应用程序 spring boot 2.0.5 )。

两个授权服务器应用程序是similaire

用户要求获取令牌时,spring将为该特定用户注册会话 并给出返回令牌,使用该令牌您可以访问应用程序1的资源,但是您无法访问应用程序2的资源

我的问题是,当您从应用程序1生成令牌时,是否还可以共享相同的安全上下文

2 个答案:

答案 0 :(得分:2)

在安全性方面,您可以做的是使应用程序变为无状态。

这是什么意思?

Spring Security将不再为新的登录用户生成会话。用户登录后,您将向他颁发令牌(例如JWT)。每次用户访问受保护的内容时,他/她将必须提供令牌,并且您的应用程序将使用公钥或私钥来验证该令牌(取决于您将使用哪种类型的令牌加密-对称或不对称)。最后,如果两个应用程序都具有用于验证传入令牌的相同密钥,则无需共享任何内容。

一些提示:

您在每次访问安全资源的请求中发送的令牌称为“访问令牌”。将其设置为 expirable 并使其短暂(例如15分钟)。为什么?与可以简单删除的会话不同,此令牌不能立即失效。万一有人劫持它,它仍然可以访问受保护的资源。

由于您的“访问令牌”寿命很短,因此用户每15分钟登录一次会很烦人。为了延长其寿命,您可以使用另一种称为“刷新令牌”的令牌,该令牌可以存储在某些数据库中。只需将其从数据库中删除,即可立即使该令牌无效。因此,即使有人劫持了它,用户也可以将其撤消,并且劫持者将无法延长会话时间。

参考:Stateless authentication with JWT

答案 1 :(得分:0)

我们也面临着类似的问题。 对于网页,我们使用的SSO在clientContext中缓存令牌,并使用Authorization-server-1

为了调用API-1,我们使用了Authorization-server-2生成的令牌。在这种情况下,我们为clientContext创建了另一个会话bean,并且正在缓存令牌(具有自己的oauth2RestTemplate和clientCredientialResource) 这是两腿的情况 我们正在研究如何使用三足情景调用Web / REST服务,但是我们无法做到,因为访问令牌检索是两步过程(使用授权代码),而回调将再次执行整个方法,而不是调用rest api

后从行继续