我正在努力实施OAuth 2.0服务器,在阅读RFC6749规范时,我意识到section 6 on Page 47关于"刷新访问令牌"。说明我们需要使用刷新令牌来获取新的令牌。
但是,例如,除了刷新令牌之外,Google还需要用户ID和密码才能执行此操作。
这让我感到困惑,因为一方面我们谷歌每天处理大量请求,而且我们的规范可能考虑的范围较小。
使用刷新令牌每小时发送一次秘密是不是很好?
我个人认为没有:因为用户ID和秘密只能用于整个OAuth 2.0流程。
基本上
我个人认为使用刷新令牌发送秘密不太安全。但也许我错过了一些东西。
如果您有其他观点,请分享:)
答案 0 :(得分:1)
我可能会遗漏某些内容,但 Google要求的内容以及OAuth2指定的内容是,当从机密客户端应用程序刷新令牌时,客户端必须自行验证。
用于机密客户端的最常见凭据类型是客户端标识符和客户端密钥。此信息将发布到客户端应用程序,与最终用户无关。
通过要求客户端身份验证,授权服务器可以确保请求来自特定客户端并相应地调整其响应。例如,授权服务器可以决定只能从机密客户端请求某些权限 - 范围。
关于减少客户机密密码需要通过网络发送的次数的争论不是问题。 OAuth2要求通过TLS进行通信,如果您在发送密码时遇到问题,那么您也会遇到发送承载访问令牌的问题。
总之,尽管有时根据规范完全按照规范做事而不会质疑整体情况可能会导致漏洞:
...一些处理过令牌的图书馆使用
none
算法作为带有经过验证的签名的有效令牌进行签名。结果?任何人都可以创建自己的"签名"具有他们想要的任何有效负载的令牌,允许在某些系统上进行任意帐户访问。
(来源:Critical vulnerabilities in JSON Web Token libraries)
某些库根据规范处理none
算法,但忽略了使用上下文;如果开发人员通过密钥验证签名,则很可能不希望将未签名的令牌视为有效。
但是,在刷新令牌请求上传递秘密不是这些情况之一,所以不要担心。