我们使用用户名密码授权将我们的 JS 客户端连接到我们的 REST 服务器。在某种程度上,oauth/token 返回的令牌是我们的会话,因为它允许在有限的时间内访问后端。
每次我们使用令牌向后端发出请求时,我们都希望刷新该会话/令牌。
我知道服务器发出了这个刷新令牌,我可以在它过期后用它来刷新我的令牌。
问题是:我不想让客户端负责捕获令牌过期异常并在令牌过期之前重新进行身份验证或安排刷新。我希望令牌自行刷新,直到在有限的时间内不再使用它 - 就像会话一样。(我也不希望它为每个“数据”请求发出刷新请求,尽管我想我记得读过,刷新令牌只有效一次..?!)
有没有办法在春季安全中做到这一点,或者我是否必须构建令牌存储的一些自定义实现或我选择的任何部分?
由于我真的找不到答案(因此发布了帖子),我在想:也许这样做并不明智,尽管我想不出为什么。如果我可以窃取令牌,我也可以窃取刷新令牌。所以我想我并没有真正看到首先拥有刷新令牌的意义..
编辑
为了回应卢克泰勒的回答,我将澄清我们的用例。
- 我们有一个 REST 服务器,它像人一样保存应用程序数据。而且还提供对我们内容管理的访问权限,并允许客户在 Facebook 上发帖。它封装了应用逻辑和数据存储
- 我们已经有一个成熟的客户端应用程序,它有自己的安全层,只需通过客户端凭据流访问我们 REST 服务器上的数据。谁可以做客户端决定的事情
- 我们有几个中小型应用程序,例如 facebook 上的联系人应用程序,它们也使用客户端凭据访问 REST 服务器上的数据
- 我们现在正在开发一个仅使用 javascript 的客户端应用程序,它将访问 REST 层来完成大型客户端应用程序所做的所有事情,但还需要提供一种方法来验证单个用户并允许多租户。因此,这个新的客户端应用程序使用用户名-密码授权进行身份验证,并使用方法级安全性来授权用户
因此,我们有一个 REST 服务器,它需要提供对我们受信任的应用程序的完全访问权限,该应用程序执行自己的安全工作,并且同一台服务器需要为我们新的多租户 JavaScript 客户端应用程序的用户提供访问权限。在生产中,我们将有多个 REST 服务器,每个服务器都有自己的数据库,但核心始终相同,因此理论上一台服务器应该能够处理所有问题。