我们使用 OAuth2 保护了我们的REST服务器,并为我们控制的几个客户端应用程序实现了 client credentials grant类型 . 现在我们面临的决定是使令牌 long lived (即它们到期"never")或经常让客户端 reAuthenticate (取决于刷新令牌到期) . 第一个意味着被捕获的令牌可以被恶意方使用,第二个意味着经常暴露客户机密,然后可以用来获取令牌 .
哪个在资源服务器到客户端 - 服务器身份验证更安全?如果我们怀疑盗窃,令牌和客户机密密码都可能无效 . 显然所有的沟通都是通过 https 完成的 .
目前我们认为客户端密钥比令牌更强大,因此对于这种双腿情况,长寿命令牌应该更好 . (对于我们即将实施的任何三条腿授权类型,我们更喜欢用作用户会话的短期令牌) .
谢谢你的想法!
1 回答
根据the specification, client credentials flow 仅适用于没有被盗 client secret 的风险的客户:
因此,如果您将此流程与不受信任的平台上的应用程序结合使用,您肯定应该重新考虑此决定 .
在您的平台受信任的先决条件下,无需担心被盗的 client secret . 然后你决定权衡攻击者可以玩被盗 access token 的时间与 reauthentication 的额外开销(仅为one call,但仍然是一个小延迟) . 当两个参与者都受到信任并且您正在使用良好的传输层安全性来抵御MITM攻击时, reauthentication step 本身不会涉及您的客户密码暴露 .
另请注意,使用 refresh tokens 与 client credentials flow 是not recommended(也是不必要的):