在Asp.Net Core中使用JWT认证(五) - 结束篇 一些常见问题

作者 the7
发布于 2020年01月30日
评论 0
浏览 210
文章系列目录
在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);
    

4条评论

  • 念往昔丶繁华竞逐

    2019年5月20日

    最后一个五官很漂亮,虽然脸稍微大了一点点,但也算普通人里漂亮的
  • Eleven

    2019年5月20日

    念往昔丶繁华竞逐:
    最后一个五官很漂亮,虽然脸稍微大了一点点,但也算普通人里漂亮的...
    这帖子真的是精品。美中不足的是,为什么要用繁体,虽然能看懂,但有些麻烦呀。
  • SukiU

    2019年5月20日

    我曾在某外企互联网公司工作过一段时间,他们就是那种工作时间聊天摸鱼,下班时间拼命工作,然后加班蹭加班费和补贴😂
微信公众号
站长帮
微信公众号,每日更新!