将 JWT 令牌存储在 cookie 中

Posted

技术标签:

【中文标题】将 JWT 令牌存储在 cookie 中【英文标题】:Store JWT token in cookie 【发布时间】:2015-09-15 12:48:33 【问题描述】:

这是我的设置:

1 个认证服务器,成功发出 JWT 令牌 身份验证。 提供信息的多个 API 资源服务器(当用户 已通过身份验证)。

现在我想构建我的 ASP.NET MVC 前端。是否可以获取我在身份验证后收到的令牌并将其放入 cookie 中,以便我可以通过我需要进行的每个安全调用来访问它?我使用 RestSharp DLL 进行 http 调用。如果它存在安全漏洞,那么我应该将我的令牌存储在哪里?

我会将此代码用于 cookie:

            System.Web.HttpContext.Current.Response.Cookies.Add(new System.Web.HttpCookie("Token")
        
            Value = token.access_token,
            HttpOnly = true
        );

【问题讨论】:

确保它也是 HTTPS 仅通过添加安全标志! Answer 到有关在浏览器应用程序中将令牌存储在何处的相关问题可能包含有用的附加信息。 【参考方案1】:

你在正确的道路上! cookie 应始终具有HttpOnly 标志,设置此标志将阻止 javascript 环境(在 Web 浏览器中)访问 cookie。这是在浏览器中防止 XSS 攻击的最佳方法。

您还应该在生产中使用 Secure 标志,以确保 cookie 仅通过 HTTPS 发送。

您还需要防止CSRF 攻击。这通常通过在另一个 cookie 中设置一个值来完成,该值必须在每个请求中提供。

我在 Stormpath 工作,我们写了很多关于前端安全的信息。这两个帖子可能有助于理解所有方面:

Token Based Authentication for Single Page Apps (SPAs)

https://stormpath.com/blog/build-secure-user-interfaces-using-jwts/

【讨论】:

感谢您的信息。有没有打算写一些关于 .NET Identity 2.0 集成的东西? @andrea: 后续有点晚了,不过刚刚写了一篇关于ASP.NET + Stormpath的文章:stormpath.com/blog/10-minute-asp-net-user-authentication【参考方案2】:

您是否正在生成自己的 JWT?

如果是,您应该考虑使用基于非对称加密的签名算法,例如“RS256”或“RS512”——这样您就可以在客户端应用程序中验证声明,而无需共享私有密钥。

您真的需要将 JWT 传递到 Cookie 中吗?

在您的 Cookie 中放置一个随机 id 可能会更安全,它引用 JWT 访问令牌,并在为您的网络应用程序提供服务的服务器上执行取消引用魔法。

【讨论】:

能否提供一些代码,请问如何将 jwt 存储在 cookie 中?假设string token=YOUR_TOKEN,并且您正在启动类中编码

以上是关于将 JWT 令牌存储在 cookie 中的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC 5 的 cookie 中存储 JWT 令牌

将 JWT 令牌存储到 HttpOnly cookie 中

JWT LocalStorage 与 Cookie

在 .net core api 中存储/验证存储在 HttpOnly cookie 中的 JWT 令牌

使用 Http 和 Secure 将 Jwt 令牌存储在 Cookie 中,而不是 Javascript 中的 LocalStorage

ReactJS 和 DRF:如何将 JWT 令牌存储在 HTTPonly cookie 中?