Oauth 2.0 为什么刷新令牌对于SPA不安全?
我正在阅读Auth0站点上关于的文档,他们声明,由于无法将它们安全地存储在浏览器中,因此使用静默身份验证来检索新的访问令牌 单页应用程序(通常实现隐式授权)在任何情况下都不应获取刷新令牌。原因是这条信息的敏感性。您可以将其视为用户凭据,因为刷新令牌允许用户永远保持身份验证。因此,您不能在浏览器中使用此信息,它必须安全存储 我很困惑。据我所知,检索新访问令牌的唯一方法是向Auth服务器提交一个新请求,以及某种形式的Auth0会话cookie,以对登录的用户进行身份验证。收到会话cookie后,Auth0服务器将能够发出新的访问令牌Oauth 2.0 为什么刷新令牌对于SPA不安全?,oauth-2.0,access-token,refresh-token,Oauth 2.0,Access Token,Refresh Token,我正在阅读Auth0站点上关于的文档,他们声明,由于无法将它们安全地存储在浏览器中,因此使用静默身份验证来检索新的访问令牌 单页应用程序(通常实现隐式授权)在任何情况下都不应获取刷新令牌。原因是这条信息的敏感性。您可以将其视为用户凭据,因为刷新令牌允许用户永远保持身份验证。因此,您不能在浏览器中使用此信息,它必须安全存储 我很困惑。据我所知,检索新访问令牌的唯一方法是向Auth服务器提交一个新请求,以及某种形式的Auth0会话cookie,以对登录的用户进行身份验证。收到会话cookie后,Au
但这与在浏览器或本地存储中使用刷新令牌有什么不同呢?是什么使会话Cookie比刷新令牌更安全?为什么在SPA中使用刷新令牌是一件坏事?好问题-因此没有真正安全的方法在浏览器上存储任何令牌(或任何其他机密信息)-请参阅。因此,单页应用程序(SPA)不应存储刷新令牌-刷新令牌尤其有问题,因为它是长期存在的(长期过期或无过期),如果被盗,则攻击者可以在每次单独过期后继续刷新访问令牌 当您需要访问令牌(例如调用API)时,最好只检索它,或者只存储在内存中(仍然容易受到XSS/CSRF的攻击),但最好使用并忘记它。然后在下次需要访问令牌时再进行一次checkSession调用 对于您的问题-checkSession请求不需要发送令牌。顾名思义,这是一个针对授权服务器的“检查会话”,以查看会话是否存在。如果是,则授权服务器响应将包含一个新的访问令牌。看
如果有任何问题需要进一步澄清等,请随时在此答案下方给我留言。刷新令牌不在SPA中使用,因为为了使用刷新令牌-并从
/token
获取新的访问令牌,SPA需要有一个客户端机密,不能安全地存储在浏览器中。但是,由于建议对/token
端点(对于公共客户端)不要求客户端机密,因此刷新令牌甚至可以在SPA中使用
要获取刷新令牌,您需要使用,它在重定向URL中传递代码,该URL将发送到承载SPA的服务器(这可能是额外的攻击点)。隐式授权只将令牌传递到浏览器(重定向URL的哈希部分不会到达服务器)
使用刷新令牌和SSO会话cookie之间的区别在于,cookie可能更安全,因为它可以标记为,使得使用JavaScript代码的攻击无法访问
更新
通过扩展,授权代码流(带有刷新令牌)甚至成为基于浏览器的应用程序的推荐流。有关详细信息,请参阅的最新版本。对于Cookie和刷新令牌以及OAuth2,存在许多误解 首先,只有机密客户机才能使用刷新令牌是不正确的。OAuth2协议规定,机密客户端必须进行身份验证,但不需要机密客户端。因此,客户端身份验证在刷新操作中是可选的。看 其次,您必须了解替代方案是什么: