将 JWT 令牌存储在 cookie 中
Store JWT token in cookie
这是我的设置:
- 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
});
你走对了! cookie 应始终具有 HttpOnly
标志,设置此标志将阻止 JavaScript 环境(在网络浏览器中)访问 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/
您要生成自己的 JWT 吗?
如果是,您应该考虑使用基于非对称加密的签名算法,例如 "RS256" 或 "RS512" -- 这样您就可以在不共享私有机密的情况下验证客户端应用程序中的声明.
您真的需要将 JWT 传递到 Cookie 中吗?
在您的 Cookie 中放置一个随机 ID 可能更安全,它引用 JWT 访问令牌,并在为您的网络应用程序提供服务的服务器上执行取消引用魔术。
这是我的设置:
- 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
});
你走对了! cookie 应始终具有 HttpOnly
标志,设置此标志将阻止 JavaScript 环境(在网络浏览器中)访问 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/
您要生成自己的 JWT 吗?
如果是,您应该考虑使用基于非对称加密的签名算法,例如 "RS256" 或 "RS512" -- 这样您就可以在不共享私有机密的情况下验证客户端应用程序中的声明.
您真的需要将 JWT 传递到 Cookie 中吗?
在您的 Cookie 中放置一个随机 ID 可能更安全,它引用 JWT 访问令牌,并在为您的网络应用程序提供服务的服务器上执行取消引用魔术。