Pet*_*ete 5 java spring spring-security oauth-2.0 spring-security-oauth2
我们使用username-password grant将我们的JS客户端连接到我们的REST服务器.在某种程度上,oauth/token返回的令牌是我们的会话,因为它允许在有限的时间内访问后端.
每当我们使用令牌向后端发出请求时,我们都想刷新该会话/令牌.
我知道服务器发出了这个刷新令牌,我可以使用它在令牌过期后刷新令牌.
问题是:我不想让客户端负责捕获令牌过期的异常,并在令牌过期之前重新验证或安排刷新.我希望令牌能够刷新,直到它在有限的时间内不再使用 - 就像会话一样.(我也不希望它发出每个"数据"请求的刷新请求,虽然我想我记得读过,刷新令牌只有一次...?!)
有没有办法在Spring安全性中做到这一点,还是我必须构建一些令牌存储或我选择的任何部分的自定义实现?
因为我无法找到答案(因此是帖子)我在想:也许这样做是不明智的,尽管我不明白为什么.如果我可以窃取令牌,我也可以窃取刷新令牌.所以我想我真的没有看到首先有一个刷新令牌的重点..
编辑
为了回应Luke Taylor的回答,我将澄清我们的用例.
因此,我们有一个REST服务器,需要提供对我们可信赖的应用程序的完全访问权限,该应用程序执行自己的安全性工作,同一服务器需要为新的多租户javascript客户端应用程序的用户提供访问权限.在生产中,我们将有几个REST服务器,每个服务器都有自己的数据库,但核心总是相同,所以理论上一个服务器应该能够处理所有.
我希望令牌能够自行刷新,直到在有限的时间内不再使用它 - 就像会话一样
这实际上没有意义(在 OAuth2 上下文中)。访问令牌由授权服务器颁发,授权服务器决定其有效期。它在资源服务器上“使用”,该资源服务器可能与授权服务器完全分离,因此 OAuth2 中没有工具将使用情况与令牌的生命周期联系起来。理论上来说,将一些东西组合在一起是可能的,但这听起来像是一个坏主意。
如果我可以窃取令牌,我也可以窃取刷新令牌。所以我想我一开始并没有真正看到拥有刷新令牌的意义。
访问令牌被重复使用并由客户端发送到授权服务器以外的服务器。刷新令牌由客户端保留,仅发送回授权服务器。客户端还必须进行身份验证才能成功使用刷新令牌,因此客户端 ID 和机密也必须受到泄露。
从您的问题中并不清楚为什么使用 OAuth2。您可能应该扩展您的问题以澄清这一点。如果只有一个客户端和一个 REST 服务器,为什么不直接使用 HTTPS 上的 BASIC 身份验证之类的东西呢?
另外,客户端是基于浏览器的应用程序吗?如果是这样,则用户名/密码授予并不真正适合在不受信任的客户端中使用。
| 归档时间: |
|
| 查看次数: |
4316 次 |
| 最近记录: |