在Asp.Net Core中使用JWT认证(五) - 结束篇 一些常见问题
文章系列目录 |
---|
在Asp.Net Core中使用JWT认证(一) - JWT介绍 |
在Asp.Net Core中使用JWT认证(二) - .Net Core中使用 |
在Asp.Net Core中使用JWT认证(三) - RSA非对称加密 |
在Asp.Net Core中使用JWT认证(四) - 跨语言使用 |
在Asp.Net Core中使用JWT认证(五) - 结束篇 一些常见问题 |
前边几篇文章,大致介绍了下什么是JWT,以及如何在项目中使用,其实关于JWT还有很多细节,也有很多问题,我把最常见的问题整理一下。
如何退出?
JWT退出不了 ,一个token颁发出去后,在有效时间内都是有效的。如真有退出需求,可试试以下方法
服务器端配合Redis等技术,将token保存起来,然后再对每次请求进行对比验证。如客户端发出退出需求,那么就移除相关token,使之失效。
客户端假退出,所谓假退出,是不去服务器执行任何signout代码,常见方式是清理掉存在客户端的token,它可能存于cookie、localstorage、keyChain 等,清理掉之后再退回到登录页即可。
如何续约
JWT颁发的token,一般都会有个有效期,且时间不建议过长,那么到期前该怎么续约呢?这里就必须引进refresh token,用户在首次登录成功之后,会得到大概如下结果
{
"JwtToken":"",
"RefreshToken":"",
"ExpireDateTime":15343344412
}
客户端在拿到数据之后会存起来,且会不定时检查过期时间,如果快要过期了,凭RefreshToken去服务器换取新的JwtToken。
Web中如何使用JWT
一般JWT用于App、小程序、单页应用等,如果是传统web程序,貌似就不行了,毕竟页面之间的跳转,也无法带上token。但事实上,JWT稍微改一下,依然可以用于Web,具体方法如下。
登录成功后,将token写入cookie。
利用.Net Core强大的中间件,在每次请求时,将cookie再附加进header即可,大概代码如下
context.Request?.Headers?.Append("Authorization", "Bearer " + cookie);
0条评论