Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest oAuth静默身份验证与刷新令牌和仅http cookie_Rest_Security_Authentication_Oauth 2.0 - Fatal编程技术网

Rest oAuth静默身份验证与刷新令牌和仅http cookie

Rest oAuth静默身份验证与刷新令牌和仅http cookie,rest,security,authentication,oauth-2.0,Rest,Security,Authentication,Oauth 2.0,不知何故,实现无状态身份验证总是让我头疼 这一次涉及静默身份验证与刷新令牌。 使用刷新标记似乎是可行的,但是有些参数我并没有真正理解 如果使用仅限http的cookie存储刷新令牌,那么危险到底是什么? 攻击者无法使用Javascript访问cookie,如果您使用SSL(您应该使用SSL),我真的不理解这个问题。 我阅读的参考资料总是说“您不应该在客户机中存储敏感数据”。看起来像是自动的,但如果您想消除对服务器会话状态的需要,这是不可能的。我也不明白为什么,因为没有任何资源能够解释它是如何被破

不知何故,实现无状态身份验证总是让我头疼

这一次涉及静默身份验证与刷新令牌。
使用刷新标记似乎是可行的,但是有些参数我并没有真正理解

如果使用仅限http的cookie存储刷新令牌,那么危险到底是什么?
攻击者无法使用Javascript访问cookie,如果您使用SSL(您应该使用SSL),我真的不理解这个问题。
我阅读的参考资料总是说“您不应该在客户机中存储敏感数据”。看起来像是自动的,但如果您想消除对服务器会话状态的需要,这是不可能的。我也不明白为什么,因为没有任何资源能够解释它是如何被破解的(我真的想知道是否有人真的知道)

我之所以有这个问题,是因为使用刷新令牌提供的不仅仅是身份验证。
例如,如果用户丢失了他/她的设备,删除刷新令牌只会使所有设备(不仅仅是浏览器)上的所有访问令牌失效,这似乎是用户想要做的事情。
毕竟,当您丢失一台设备时,您需要采取措施保护您的数据是有道理的

因此,“如果攻击者能够访问刷新令牌,他可以无限地刷新您的令牌”这一论点听起来像是另一个我无法理解的论点。攻击者不应获取刷新令牌。他怎么会得到它?这与说“如果攻击者掌握了你银行卡的密码,他就可以无限地接近你的钱”是一样的。如果你丢失了你的银行卡,你可以叫卡站;同样,如果您丢失了刷新令牌,您将删除它以使所有访问令牌无效。那么这是一个什么样的论点呢

您能否澄清为什么我不能将刷新令牌存储在仅http的cookie中,以及静默身份验证流如何在此基础上进行改进

编辑: 注意,我读了一些其他文章,建议通过在仅http的cookie中发送加密的jwt签名来将jwt存储在浏览器中。这些文章获得了大量的支持票,所以这一点突然变得很好。这对我来说毫无意义

根据评论编辑:

架构非常简单:

  • React/Redux SPA在后端使用REST api
  • 需要通过Google、LinkedIn、Github进行社交登录
  • 需要在不需要用户交互的情况下刷新令牌
  • 访问我自己的api资源(最好使用jwt)
  • 撤销刷新令牌的能力

我不知道为什么它看起来很复杂(哈哈)

刷新令牌广泛用于:

  • 服务器端web应用程序,按照您的建议,它们存储在仅HTTP的cookie中
  • 桌面和移动应用程序,它们也可以存储在操作系统安全存储中
刷新令牌不应该是无限可更新的,通常代表用户会话时间-例如:

  • 刷新令牌/用户会话生存期=12小时
  • 访问令牌/API消息凭据生存期=60分钟
在上面的文章中,SPA担心的是浏览器中没有真正安全的存储—尽管您不打算使用浏览器存储—因此没有问题

一个风险是,用户可能会获得安全cookie,并通过浏览器开发人员工具将其重播到API:

  • 为了缓解这种情况,当然重要的是确保API具有经过良好设计的授权,并且用户可以使用令牌执行的操作与他们可以在UI中执行的操作相匹配

  • 另一个风险是,另一个浏览器选项卡中的恶意应用程序将同一cookie发送到您的后端。所以你需要防止这种情况


请注意,SPA有自己的基于授权服务器cookie的cookie-如果使用SPA,我更喜欢该选项,而不是发布您自己的cookie。

刷新令牌广泛用于:

  • 服务器端web应用程序,按照您的建议,它们存储在仅HTTP的cookie中
  • 桌面和移动应用程序,它们也可以存储在操作系统安全存储中
刷新令牌不应该是无限可更新的,通常代表用户会话时间-例如:

  • 刷新令牌/用户会话生存期=12小时
  • 访问令牌/API消息凭据生存期=60分钟
在上面的文章中,SPA担心的是浏览器中没有真正安全的存储—尽管您不打算使用浏览器存储—因此没有问题

一个风险是,用户可能会获得安全cookie,并通过浏览器开发人员工具将其重播到API:

  • 为了缓解这种情况,当然重要的是确保API具有经过良好设计的授权,并且用户可以使用令牌执行的操作与他们可以在UI中执行的操作相匹配

  • 另一个风险是,另一个浏览器选项卡中的恶意应用程序将同一cookie发送到您的后端。所以你需要防止这种情况


请注意,SPA有自己的基于授权服务器cookie的cookie-如果使用SPA,我更喜欢这个选项,而不是发布您自己的cookie。

Hi@Gary。谢谢你的回答,但我有一些问题,我会列举出来。1) 您提到了SSR webapps,但SPA不能通过REST使用仅http的cookie(看起来不是这样的)这是事实吗?2) 通过浏览器开发工具获取cookie对我来说没有多大意义,只能从Javascript访问http cookie(这就是它的用途)。3) 为什么要降低不存在的风险?CSRF保护好的,我能处理。我正在寻找一个不遵循此流程的原因,即将jwt+oAuth刷新令牌存储在仅http的cookie中。这似乎是一种可行的方法。您链接的文章使用了会话身份验证,这是我想要避免的。一切似乎都围绕着仅http的cookie是否安全的问题。我读到的任何文章都是如此