我在我的api中添加了基于jwt的身份验证,并在令牌中添加了令牌(授权:Bearer {tokenhere})。
我研究了如何在客户端存储它,最推荐的方法是使用在服务器上设置的HttpOnly cookie,因此客户端代码无法访问它。浏览器将获取并将其附加到以后的请求中。
要使其正常工作,服务器必须在响应中写入此cookie,并能够验证它,而不是验证标头中的令牌(授权:Bearer {tokenhere})。
如何设置?我搜索了低级内容,但没有找到相关的教程,它要么是cookie要么是jwt,从来没有jwt存储为httponly cookie。
答案 0 :(得分:1)
我找到了两个答案,或者:
-捕获请求并将令牌从cookie移到标头作为auth承载,因此,当要处理jwt auth时,它将像这样(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 });
答案 1 :(得分:-1)
您说的是一个网络api,因此您无需存储它。基本上,您需要检查对Web api发出的每个请求上是否都有有效的承载令牌。 保存令牌/ cookie的情况发生在有一个用户代理存在问题的情况下,在这种情况下,您启动一个用户会话,并将会话ID保存在cookie中,该cookie在每次后续请求中都传递到您的服务器,这就是您的方式知道是同一用户。
即使在以后的情况下,人们也选择不将那些令牌保存在cookie中,以防止cookie的大小变大。关键是您不需要,您无需对令牌进行身份验证,就可以在网站会话中保存其角色,身份等,因此不再需要令牌。 但是,对于Web api,没有状态,您应该验证每个请求是否包含承载令牌。