【问题标题】:SPA + web api with jwt token/cookies带有 jwt 令牌/cookie 的 SPA + web api
【发布时间】:2018-10-20 10:19:19
【问题描述】:

我有一个 SPA Angular 5 应用程序,其后端有一个 ASP.NET Core Web API 作为纯 Web API(它们可以托管在不同的服务器/域中)。在网上搜索和阅读后,我知道我们可以将令牌存储在 localstorage 或 httponly cookie 中,但这两种方法都有其自身的漏洞(localstorage 易受 XSS 攻击,cookie 易受 CSRF 攻击)。

所以我想知道:

  1. 在保护 Web API 时,人们在生产站点中实际使用的既定方法或实践是什么,可以为 XSS 和 CSRF 攻击提供合理的理由?例如,我查看了 portal.azure.com。他们似乎将不记名令牌放在请求标头中,但我看不到他们存储令牌的位置。
  2. SPA 和 Web API 获取防伪令牌的常见做法/方式是什么?我找不到这方面的太多信息。

谢谢。

【问题讨论】:

    标签: angular asp.net-web-api jwt


    【解决方案1】:

    JWT 就像 UserID 和 Password 一样,您不应该将 localStorage 用于敏感数据,这并不意味着。例如阅读这篇好文章和这个 youtube 视频:

    https://dev.to/rdegges/please-stop-using-local-storage-1i04https://medium.com/spektrakel-blog/local-storage-is-not-a-secure-place-9542cbfa904a XSRF/CSRF 可以通过各种技术避免,请阅读 OWASP

    https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

    一个常见的方法是(Double Submit Cookie),是在每个req的http/s header中添加一个xsfr-token,这是因为攻击者不能修改req的http header。

    基本上你必须发送两个 cookie:

    1) 带有 JWT 的 HttpOnly Cookie 1) no-HttpOnly Cookie 与 xsrf-token

    然后创建一个拦截器,从 cookie 中读取 xsrf-token 并添加一个标头 x-xsrf-token。服务器端检查 JWT 中的 xsrf-token 是否等于 x-xsrf-token 中的令牌(对 xsrf-token 使用不可猜测的算法)

    希望对你有帮助

    【讨论】:

    • 感谢您的回答。我想知道如果我在域 A 中有我的 SPA,而在域 B 中有后端 web api,双重提交 cookie 是否有效?如何获取 CSRF 令牌?
    • 嗨,但是域 B 是域 A 的子域?
    • 很可能我们可以将域 B 作为 A 的子域。
    • 嗨,在这种情况下,可以将域的 cookie 发送到子域。您必须“设置” Set-Cookie 标头读取:tools.ietf.org/html/rfc2109 Set-Cookie: name=value; domain=mydomain.com 在这里你可以找到一个解释:stackoverflow.com/questions/18492576/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2023-03-23
    • 2014-11-27
    • 2018-05-19
    • 2017-08-20
    • 2016-08-01
    • 2015-03-01
    相关资源
    最近更新 更多