再次浏览器应用程序和身份验证令牌

Browser applications and auth tokens again

我一直在回顾我们应该如何在我们的浏览器应用程序 (SPA) 中处理 OAuth 身份验证,并且那里有一大堆文章让这一切变得非常混乱......我真的缺少一些具体和非常简单的设置的最佳实践指南。

我们有这个 ASP.NET Web API 2,它使用 IdSvr3 颁发的令牌进行保护。到目前为止,一切都很好。适用于本机客户端和服务器应用程序。

现在浏览器的东西...查看 JavaScriptImplicitClient which uses the oidc-client-js 库等示例以使用隐式流检索令牌。令牌存储在浏览器中,可以使用 JavaScript 访问,并在那里对 XSS 攻击开放。 为了避免这种情况,建议将令牌存储在cookie中,然后设置一种机制来防止CSRF攻击。

看起来很简单,但是是什么设置了 cookie?

您是否有此类设置的示例,或者您能否提供一些有关如何设置的提示?

就个人而言,大多数时候由于 XSS 而避免令牌的 Web 存储似乎有点加剧。有一个重要的问题,如果你的应用程序容易受到 XSS 攻击,这个漏洞的影响是否会显着增加,因为你也泄露了令牌,或者即使你没有在那里存储令牌并且你在同一个麻烦的类型。

我比较了几种在 Web 浏览器应用程序中存储访问令牌的方法的优缺点,您可以 check in this answer to a related question

最终每个案例​​都有自己的细节,这可能会打破一种方法与另一种方法(cookie 或网络存储)之间的平衡。只是不要从一开始就忽略任何选项,并根据您的要求查看所有选项。

我敢打赌,有一些实现将它们存储在 HTTP-Only cookie 中,以避免 Web 存储的 XSS 问题,然后最终使用一个容易受到攻击的 CSRF 缓解策略XSS.