Oauth2 - 客户端凭证流中的长寿命令牌与重新身份验证

Posted

技术标签:

【中文标题】Oauth2 - 客户端凭证流中的长寿命令牌与重新身份验证【英文标题】:Oauth2 - long lived Tokens vs Reauthentication in a Client Credentials Flow 【发布时间】:2012-12-28 06:07:51 【问题描述】:

我们已经使用 OAuth2 保护了我们的 REST 服务器,并为我们控制的多个客户端应用实施了 客户端凭据 授权类型。现在我们面临的决定是让令牌长期存在(即它们“永不”过期)或让客户端重新验证非常频繁(取决于刷新令牌到期)。第一个意味着捕获的令牌可能被恶意方使用,第二个意味着经常暴露客户端秘密,然后又可以用来获取令牌。

在资源服务器到客户端服务器身份验证中哪个更安全? 如果我们怀疑被盗,令牌和客户端密码都可以失效。显然所有通信都是通过 https..

完成的

目前我们认为客户端密钥比令牌更强大,因此对于这种两条腿的场景来说,长期存在的令牌应该更好。 (对于我们将很快实施的任何三足授权类型,我们更喜欢使用短期令牌作为用户会话)。

感谢您的想法!

【问题讨论】:

【参考方案1】:

根据the specification,客户端凭据流只允许用于不存在客户端密码被盗风险的客户端:

客户端凭据授权类型必须仅供机密客户端使用。

因此,如果您将此流程与不受信任平台上的应用程序结合使用,您绝对应该重新考虑这个决定。

在您的平台受信任的前提下,您无需担心客户端机密被盗。然后,您的决定会权衡攻击者使用被盗 访问令牌 的时间与 重新身份验证 的额外开销(仅one call,但仍有一点延迟)。当两个参与者都受信任并且您使用良好的传输层安全性来抵御 MITM 攻击时,重新身份验证步骤本身不会泄露您的客户端机密。

另请注意,将刷新令牌客户端凭据流一起使用是not recommended(也是不必要的):

不应包含刷新令牌。

【讨论】:

感谢您的回答。我们可能会使用长期存在的令牌,添加一个持久层,以便我们可以不时地使令牌无效。但是您的回答提出了另外两个问题。为了便于阅读,我会将它们添加到我的帖子中。非常感谢您对这些的看法。

以上是关于Oauth2 - 客户端凭证流中的长寿命令牌与重新身份验证的主要内容,如果未能解决你的问题,请参考以下文章

更新长寿命访问令牌服务器端

刷新令牌如何比长寿命的 JWT 更安全?

为啥不使用长寿命会话 ID 来代替带有令牌的持久 cookie?

OpenID Connect:如何在客户端凭证流中添加自定义声明数据

google oauth refresh token 长寿命解决方案

Spring Security 5.1 - 使用 WebClient 获取客户端凭证流的令牌