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

use*_*009 6 cookies authorization jwt asp.net-core

我将基于 jwt 的身份验证添加到我的 api,将令牌添加到标头(授权:Bearer {tokenhere})。

我研究了如何在客户端存储它,最推荐的方法是使用 HttpOnly cookie,它设置在服务器上,因此客户端代码无法访问它。浏览器将获取它并将其附加到将来的请求中。

为此,服务器必须在响应中写入此 cookie,并能够验证它而不是标头中的令牌(授权:Bearer {tokenhere})。

我该如何设置?我搜索了how和low,但没有找到这方面的教程,它要么是cookie,要么是jwt,从来没有将jwt存储为httponly cookie。

use*_*009 8

我找到了两个答案:

- 捕获请求并将令牌从 cookie 移动到标头作为身份验证承载者,因此当它开始处理 jwt 身份验证时,它将得到这样的结果(如何使用 JWT + HttpOnly Cookie 正确刷新令牌?

-覆盖 jwt 处理程序事件并覆盖从 cookie 读取的令牌(在 ASP.NET Core 中从 Cookie 而不是 Headers 读取 JWT 令牌

将其写入 cookie 没什么大不了的,在登录方法中我只是这样做:

HttpContext.Response.Cookies.Append("access_token", tokens.AccessToken, new CookieOptions { HttpOnly = true });
Run Code Online (Sandbox Code Playgroud)


Yan*_*ode -3

它\xe2\x80\x99是你说的一个Web api,所以你不需要\xe2\x80\x99存储它。您基本上需要检查传入 Web api 的每个请求是否都有有效的承载令牌。\n保存令牌/cookie 的情况发生在存在相关用户代理时,在这种情况下您启动用户会话并会话 ID 保存在 cookie 中,该 cookie 在每次后续请求时都会传递到您的服务器,并且您如何知道它是同一用户。

\n\n

即使在后一种情况下,人们也选择不将这些令牌保存在 cookie 中,以防止 cookie 变得过大。关键是您不需要\xe2\x80\x99,您可以对用户进行身份验证,并将他的角色、身份等保存在您的网站\xe2\x80\x99s 会话中,因此不再需要令牌。\nFor然而,Web api 没有状态,您应该验证每个请求是否存在不记名令牌。

\n