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 - 客户端凭证流中的长寿命令牌与重新身份验证的主要内容,如果未能解决你的问题,请参考以下文章
为啥不使用长寿命会话 ID 来代替带有令牌的持久 cookie?
OpenID Connect:如何在客户端凭证流中添加自定义声明数据