Menu
本书未发布

4.5. 登录 API 获取 JWT 令牌

JWT

JWT 是 JSON Web Token 的缩写,是一个非常轻巧的规范,这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。

JWT 由头部(header)、载荷(payload)与签名(signature)组成,一个 JWT 类似下面这样:

{
    "typ":"JWT",
    "alg":"HS256"
}
{
    "iss":"http://larabbs.test",
    "iat":1515733500,
    "exp":1515737100,
    "nbf":1515733500,
    "jti":"c3U4VevxG2ZA1qhT",
    "sub":1,
    "prv":"23bd5c8949f600adb39e701c400872db7a5976f7"
}
signature
  • 头部申明了加密算法;
  • 载荷中有两个比较重要的数据,exp 是过期时间,sub 是 JWT 的主体,这里就是用户的 id;
  • 最后的 signature 是由服务器进行的签名,保证了 token 不被篡改。

JWT 最后是通过 Base64 编码的,也就是说,它可以被翻译回原来的样子来的。所以不要在 JWT 中存放一些敏感信息。

用户 id,过期时间等数据都保存在 Token 中了,所以并不需要将 Token 保存在服...

本文章首发在 Laravel China 社区

为了保证课程的高品质,我们需要对课程进行收费。付费后 才能观看剩余内容。 购买

上一篇 下一篇
讨论数量: 63

遗忘的时光
结尾多一个分号?
1 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
sainmu
这篇贴出来的代码没有判断 openid 和 unionid,忘修正?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
山海王子
请问 token 的验证原理是什么呢?
0 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
江渚之上
刷新和删除 token 报错?
0 个点赞 | 7 个回复 | 问答 | 课程版本 5.5
wangjiu
$this->response 是什么意思?
1 个点赞 | 10 个回复 | 问答 | 课程版本 5.5
wangjiu
刷新 token 方法无法返回 Auth::guard ('API')->user () 当前用户吗?
0 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
wangjiu
刷新 token 之后,旧的 token 会立即失效,应该如何解决?
1 个点赞 | 16 个回复 | 问答 | 课程版本 5.5
AmberLavigne
JWT 如何被恶意劫持了怎么办?会出现这种情况吗?
0 个点赞 | 8 个回复 | 问答 | 课程版本 5.5
Yang
过期时间为什么要设置成 TTL * 60 ?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
Daemon
在 config/api.php,auth 中增加 JWT 相关的配置,作用是什么呢?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
holashatu
Auth::guard ('API')->attempt ($credentials)) 到底是什么?
5 个点赞 | 10 个回复 | 问答 | 课程版本 5.5
HugBoomsj
求助 Token has expired?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
zssen
unique 规则不生效,其他的验证规则生效是什么问题?
0 个点赞 | 14 个回复 | 问答 | 课程版本 5.5
Stone007
5.6.21 安装 JWT 报错了?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
QiyueShiyi
用户能互踢吗?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
heart_5653
如何查看源码?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
Pepsi丶
请问有人遇到过这个问题吗?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
jehaz007
jwt 刷新 token 具体方案,见答案
10 个点赞 | 10 个回复 | 问答 | 课程版本 5.5
zhou0818
jwt-auth 如何设置,获取刷新 token 的过期时间?
0 个点赞 | 7 个回复 | 问答 | 课程版本 5.5
Rainbow9502
关于认证中间件指定配置为 API 而非 Web 的问题?
1 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
hanghang
设置 token 的过期日期为永久,报错?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
xolee
删除 token 操作后,postman 提示 Could not get any response?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
simplewater
请问为什么.env 的配置过期时间无效,一直是 60 分钟?
1 个点赞 | 6 个回复 | 问答 | 课程版本 5.5
xuecong
刷新 token 和删除 token 路由是不是应该添加 api.auth 中间件?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
czy2020
有人遇到这个问吗?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
xuecong
为什么登录完成后不直接返回用户个人信息?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
afoolishman
请问,如果我想每个用户的刷新期限不同,应该如何设置?
1 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
Ciroy
jwt 是否安全? 这个不是可以直接被解析出来么?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
tooyond
我觉得把 Token 放在 Header 里更好一些
1 个点赞 | 7 个回复 | 分享 | 课程版本 5.5
zhangpipi
JWT 这种验证机制的安全性有多强?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
Avant
用户可以多设备登录?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
HugBoomsj
API 接口安全,防止抓包如何处理?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
logic
tinker 验证错误
0 个点赞 | 7 个回复 | 问答 | 课程版本 5.5
WilliamQian
这种方式可以替代 Laravel 自带的 auth 用户认证么?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
logic
The payload is invalid?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
Innocence6
刷新 token 报 405?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
悲剧不上演
教程中换取 Token 的方式与 OAuth2.0 不一样?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
Cwift
Laravel 5.7 安装 JWT 失败?
2 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
Innocence6
Token Signature could not be verified?
0 个点赞 | 6 个回复 | 问答 | 课程版本 5.5
szlwl01
token 原理是什么?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
hustnzj
请问 api.auth 这个中间件在哪里使用了?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
arfurs
dingo/API 的 api.auth 中间件对于不同用户表认证问题
1 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
AllenBool
第三方登录修改后,操作 刷新 token 一直出现 500 报错?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
阿伦
为什么教程和 JWT 的文档不一样?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
阿伦
Auth 与 auth () 的区别?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
hehorange
JWT 跟 token 的区别?
0 个点赞 | 6 个回复 | 问答 | 课程版本 5.5
Wen369367988
jwt token 有效期
0 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
__K7__
密码验证用教程的一直验证不过
0 个点赞 | 7 个回复 | 问答 | 课程版本 5.5
Mr0451
关于 jwt 刷新的疑惑
0 个点赞 | 5 个回复 | 问答 | 课程版本 5.5
taowendi
生成 token 报错
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.7
qujsh
jwt 刷新过期了的问题
0 个点赞 | 5 个回复 | 问答 | 课程版本 5.7
Narcissus
phpstorm dingo/API 没有代码提示
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
Narcissus
不明白 token_type 等于 Bearer 的作用
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
刻意练习,每日精进。
1
点赞
789
浏览
63
讨论
贡献者