【问题标题】:Store/validate JWT token stored in HttpOnly cookie in .net core api在 .net core api 中存储/验证存储在 HttpOnly cookie 中的 JWT 令牌
【发布时间】:2020-08-09 04:11:20
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: asp.net-core cookies jwt authorization


    【解决方案1】:

    我找到了 2 个答案:

    -捕获请求并将令牌从 cookie 移动到标头作为身份验证承载,因此当它开始处理 jwt 身份验证时,它会像这样得到它 (How to properly refresh a token using JWT + HttpOnly Cookie?)

    -覆盖 jwt 处理程序事件并覆盖从 cookie 中读取的令牌 (In ASP.NET Core read JWT token from Cookie instead of Headers)

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

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

    【讨论】:

      【解决方案2】:

      你说的是一个web api,所以你不需要存储它。您基本上需要检查到达您的 Web api 的每个请求是否有有效的不记名令牌。 保存令牌/cookie的场景发生在有问题的用户代理时,在这种情况下,您启动用户会话并将会话ID保存在cookie中,在每个后续请求中都会将其传递给您的服务器,这就是您的方式知道是同一个用户。

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

      【讨论】:

      • 我会改写我原来的帖子。我的意思是客户需要了解它(存储它)。要么是内存,但生命周期不够,本地存储/客户端处理的 cookie(不安全,因为 js 可以访问它),或者我将令牌放入服务器上的 cookie 中,将其标记为 httponly 以便客户端代码不会t 访问它,浏览器将处理它以传递给未来的回调
      • 我很困惑你有什么架构。是网站还是服务器托管的 ui(网络应用)与网络 api 对话?
      • .net 核心后端(restful webapi),角度前端,带有 jwt 令牌生成的自行开发的身份验证
      • @user1269009 你们每个人都想出了解决方案吗?我也有类似的情况,正在研究如何实现这一目标。
      猜你喜欢
      • 2021-10-16
      • 2020-10-06
      • 1970-01-01
      • 2021-02-11
      • 2015-09-15
      • 2016-09-13
      • 2020-12-09
      • 2021-06-18
      • 2021-06-27
      相关资源
      最近更新 更多