前言
初次了解JWT,很基础,高手勿喷。
基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session。
token应用流程为:
1、初次登录:用户初次登录,输入用户名密码。
2、密码验证:服务器从数据库取出用户名和密码进行验证。
3、生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT。
4、返还JWT:服务器的HTTP RESPONSE中将JWT返还。
5、带JWT的请求:以后客户端发起请求,HTTP REQUEST HEADER中的Authorization字段都要有值,为JWT,用来验证用户身份以及对路由,服务和资源的访问权限进行验证。请求验证的url可以例如:http://127.0.0.1:8083/change/goodsMenu"color: #ff0000">JWT是啥?
JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为:
A.B.C
A由JWT头部信息header加密得到
B由JWT用到的身份验证信息json数据加密得到
C由A和B加密得到,是校验部分
怎样生成A?
header格式为:
{ "typ": "JWT", "alg": "HS256" }
它就是一个json串,两个字段是必须的,不能多也不能少。alg字段指定了生成C的算法,默认值是HS256
将header用base64加密,得到A
通常,JWT库中,可以把A部分固定写死,用户最多指定一个alg的取值
怎样计算B?
根据JWT claim set[用base64]加密得到的。claim set是一个json数据,是表明用户身份的数据,可自行指定字段很灵活,也有固定字段表示特定含义(但不一定要包含特定字段,只是推荐)。
这里偷懒,直接用php中的代码来表示claim set了,重在说明字段含义:
$token = array( "iss" => "http://example.org", #非必须。issuer 请求实体,可以是发起请求的用户的信息,也可是jwt的签发者。 "iat" => 1356999524, #非必须。issued at。 token创建时间,unix时间戳格式 "exp" => "1548333419", #非必须。expire 指定token的生命周期。unix时间戳格式 "aud" => "http://example.com", #非必须。接收该JWT的一方。 "sub" => "jrocket@example.com", #非必须。该JWT所面向的用户 "nbf" => 1357000000, # 非必须。not before。如果当前时间在nbf里的时间之前,则Token不被接受;一般都会留一些余地,比如几分钟。 "jti" => '222we', # 非必须。JWT ID。针对当前token的唯一标识 "GivenName" => "Jonny", # 自定义字段 "Surname" => "Rocket", # 自定义字段 "Email" => "jrocket@example.com", # 自定义字段 "Role" => ["Manager", "Project Administrator"] # 自定义字段 );
JWT遵循RFC7519,里面提到claim set的json数据中,自定义字段的key是一个string,value是一个json数据。因此随意编写吧,很灵活。
个人初学,认为一个最基本最简单最常用的claim set为:
$token=array( "user_id" => 123456, #用户id,表明用户 "iat" => 1356999524, #token发布时间 "exp" => 1556999524, #token过期时间 );
将claim set加密后得到B,学名payload
怎样计算C?
将A.B使用HS256加密(其实是用header中指定的算法),当然加密过程中还需要密钥(自行指定的一个字符串)。
加密得到C,学名signature,其实就是一个字符串。作用类似于CRC校验,保证加密没有问题。
好了,现在A.B.C就是生成的token了。
怎样使用token?
可以放到HTTP请求的请求头中,通常是Authorization字段。
也有人说放到cookie。不过移动端app用cookie似乎不方便。
token应用流程?
初次登录:用户初次登录,输入用户名密码
密码验证:服务器从数据库取出用户名和密码进行验证
生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT
返还JWT:服务器的HTTP RESPONSE中将JWT返还
带JWT的请求:以后客户端发起请求,HTTP REQUEST HEADER中的Authorizatio字段都要有值,为JWT
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 崔健《光冻》[首版][WAV+CUE][975M]
- 于台烟.1994-表情【巨石】【WAV+CUE】
- 施文彬.2011-环岛旅行【禾广娱乐】【WAV+CUE】
- 郑俊弘.2016-THE.RED.BOX.LIVE.GREATEST.HITS.2CD【星梦娱乐】【WAV+CUE】
- ABC德国制 《极致HIFI女伶天碟1》6N纯银镀膜[WAV+CUE][1G]
- 刘德华《我和我追逐的梦》台湾首版 [WAV+CUE][859M]
- 林志炫《单身情歌》3CD 超炫精选 [WAV+CUE][1.2G]
- 王嘉文《芳声再艳2》纯银CD[低速原抓WAV+CUE]
- 郭宴《宴乐声色》[低速原抓WAV+CUE]
- 林子祥《爱到发烧SACD(限量版)》[WAV+CUE]
- 群星.1999-爱情麻辣烫电影情歌精丫滚石】【WAV+CUE】
- 许秋怡.1992-偷偷想你【BMG】【WAV+CUE】
- 李龙基.1982-男子汉(2004复刻版)【EMI百代】【WAV+CUE】
- 海来阿木《忧伤歌王DSD》2CD A2HD5纯银镀层 [WAV+CUE][1.5G]
- 林忆莲《呼吸(大碟29)》维京 [WAV+CUE][995M]