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 保存在服...

本文章首发在 LearnKu.com 网站上。

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

上一篇 下一篇
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 76

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