在.net core api中存储在HttpOnly cookie中的JWT token的存储验证。

问题描述 投票:0回答:1

我在api上添加了基于jwt的auth,通过在头中添加token来工作(Authorization : Bearer {tokenhere})。

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

要做到这一点,服务器必须在响应中写入这个cookie,并且能够验证它,而不是头中的token(Authorization : Bearer {tokenhere})。

如何设置呢?我找来找去,也没找到这方面的教程,要么是cookie,要么是jwt,从来没有把jwt存储成httponly cookie。

asp.net-core cookies jwt authorization
1个回答
0
投票

我找到了2个答案,要么。

-捕获请求并将cookie中的token移到头中作为auth bearer,这样当它处理jwt auth时,就会得到这样的token(如何使用JWT + HttpOnly Cookie正确刷新token?)

-覆盖jwt处理事件并覆盖从cookie()中读取的token。在ASP.NET Core中,从Cookie中读取JWT标记而不是Headers。)

写到cookie里也没什么大不了的,在登录方法里我就这么做。

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

-1
投票

你说这是一个web api,所以你不需要存储它。你基本上需要检查每一个来到你的web api的请求上是否有一个有效的bearer token.保存tokencookie的情况发生在有一个用户代理的时候,在这种情况下,你启动一个用户会话,会话id被保存在cookie中,在以后的每一个请求中,cookie都会被传递给你的服务器,这就是你如何知道这是同一个用户。

即使在后一种情况下,人们也会选择不将这些标记保存在cookie中,以防止cookie变得很大。而问题是,你不需要,你对用户进行了认证,你把他的角色、身份等保存在你网站的会话中,所以已经不需要token了.然而对于web apis来说,没有状态,你应该对每个请求进行验证,以确定是否存在不记名token。

© www.soinside.com 2019 - 2024. All rights reserved.