我们已使用 OAuth2 保护了REST服务器,并为我们控制的多个客户端应用实现了客户端凭据授予类型。现在,我们面临这样的决定:要么使 token 生命周期长(即它们永不过期),要么让客户端经常重新认证(取决于刷新 token 的到期时间)。第一种手段是捕获的 token 可能被恶意方使用,第二种手段经常暴露客户 secret ,然后又可以用来获取 token 。

在资源服务器到客户端服务器的身份验证中,哪个更安全?
如果我们怀疑盗窃,则 token 和客户 secret 都可能失效。显然,所有通信都是通过 https 完成的。

当前,我们正在考虑客户端 secret 比 token 更强大,因此对于这种两腿的情况,生命周期较长的 token 应该更好。 (对于我们即将实现的任何三足式授权类型,我们都希望使用短暂的 token 作为用户 session )。

感谢您的想法!

最佳答案

根据the specification的说法,客户端凭据流仅适用于没有冒其客户端 secret 被盗的风险的客户端:



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

在您的平台受信任的前提下,无需担心客户端 secret 被盗。然后,您的决定权衡了攻击者可以使用被盗的访问 token 进行游戏的时间,以及重新认证的额外开销(仅one call,但延迟很小)。 重新认证步骤本身不是一个问题,当两个参与者都受到信任并且您使用良好的传输层安全性抵御MITM攻击时,客户端 secret 暴露的问题。

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

10-07 20:04
查看更多