当前位置: 首页 > 知识库问答 >
问题:

SPA中刷新令牌Cookie的CSRF保护

元鸿波
2023-03-14

我正在AngularJS SPA中使用资源所有者密码凭证OAuth 2.0流。有几篇文章(这里,这里…)这个问题的答案解释了我们不应该将刷新令牌存储在(web)客户端(LocalStorage)上,而是将它们加密存储在HttpOnly Cookie中,并使用代理API实现对refreh令牌的解密,从而将其转发给安全令牌服务。

大多数文章都暗示我们应该使用一种常见的保护机制来关注CSRF。我想知道单页应用程序的最佳解决方案是什么。

Angular$http引用解释了我们应该如何对抗CSRF的默认机制:服务器必须设置一个名为XSRF-TOKEN的cookie。这个cookie必须是Javascript可读的,以便我们可以在请求中设置X-XSRF-TOKENHTTP头。此机制是否足以保护refreh令牌场景?

>

访问令牌过期。调用api/Token验证XSRF-TOKEN并使用Token cookiehtml" target="_blank">返回新的访问令牌;设置新的刷新cookie

AppCache重新启动应用程序。内存中没有访问令牌,但cookie可用。使用api/token。。。

坏家伙想偷我们的饼干。准备好的页面使用我们的cookie请求api/token,但没有X-XSRF-tokenHTTP头。

有严重的安全问题吗?

共有1个答案

孔扬
2023-03-14

据我所知,最好的方法是当服务器呈现索引时。html中包含CSFR标记,之后可以作为标准AngularJS SPA使用。所以索引。然后使用后端服务/框架生成的CSFR令牌丰富html。SpringSecurity为将令牌注入模板提供了很好的支持。

之后,您可以使用javascript从模板中获取令牌,并通过使用http拦截器请求钩子将其设置为标题中的所有$超文本传输协议请求。我不清楚地记得什么是正确的方法,但我相信你上面提到的文章中有描述)

 类似资料:
  • 我对CakePHP(v3.7)比较陌生。我有一个应用程序,其中出现了“缺少Csrf令牌Cookie”错误。 在pplication.php,我有: 表单页面有一个隐藏的表单元素,其中包含_csrfToken。我不明白为什么没有在邮件上找到它? 深入研究后,我发现在CsrfProttionMiddleware.php中,下面的_validateToken()函数的行为如下: $cookie为空(没有

  • 我正在使用JWTs为我的应用程序验证用户身份。当用户登录时,他们将获得一个访问令牌和一个刷新令牌。为了保证刷新令牌的安全,我不将其存储在客户端,而是将其与他们的帐户一起保存在后端,这样就不容易访问了。虽然我对刷新令牌的安全性感到困惑,但当我阅读关于如何使用刷新令牌的在线资源时,以下是我理解的逻辑: 身份验证 将访问令牌+刷新令牌存储在某个位置(在我的示例中,访问令牌位于前端,刷新令牌位于后端) 执

  • 我已经读了几天了,我有两个问题 1)如果我将访问令牌存储在localstorage中,并将刷新令牌存储在HttpOnly cookie中,我是否需要担心XSRF?如果攻击者欺骗发出请求,那么好的用户会收到响应。如果它请求新的acces令牌和刷新令牌,攻击者不会窃取响应的内容,这并不坏。这是真的吗?

  • 我已经创建了两个独立的项目;一个用于我的应用程序api,另一个用于我的应用程序客户端。我使用的是。NET Core2.2和Angular 7。我读过一些文章,其中有人说要使用httponly cookie。我在这方面的问题是;如何使用Azure Active Directory B2C?我只是很困惑,所以如果有人能清理一些东西,我将不胜感激。

  • 我在自己的Web API上使用Oauth2,在Web应用程序上使用ASP.NET C#来使用该API。在我的web应用程序上,我正在进行HttpWebRequests。当我的访问令牌过期时,我调用一个方法“refreshToken”,该方法发出请求以获取新的访问令牌。这工作很好,没有问题...除了我得到的响应包含一个新的刷新令牌???我在等新的访问令牌。我甚至认为在没有再次传递凭据的情况下这是不可

  • 授权服务器可以给Web应用客户端和本机应用程序客户端颁发刷新令牌。 刷新令牌在传输和储存时必须保持机密性,并只与授权服务器和刷新令牌被颁发的客户端共享。授权服务器必须维护刷新令牌和它被颁发给的客户端之间的绑定。刷新令牌必须只能使用带有RFC2818定义的服务器身份验证的1.6所述的TLS 传输。 授权服务器必须验证刷新令牌和客户端身份之间的绑定,无论客户端身份是否能被验证。当无法进行客户端身份验证