JWT 是 JSON Web Token 的缩写,它是一个规范,让用户和服务器之间传递安全可靠的信息。
JWT介绍
JWT 由头部(header)、载荷(payload)与签名(signature)组成
{
“typ”:“JWT”,
“alg”:“HS256”
}
{
“iss”: “http://package.test”,
“iat”: 1673495574,
“exp”: 1673499174,
“nbf”: 1673495574,
“jti”: “uuid”,
“sub”: 1,
“prv”: “87e0af1ef9fd15812fdec97153a14e0b047546aa”
}
signature
- 头部申明了加密算法;
- 载荷中中记录了一些关键数据:
iss: 签发者,也就是 package.test ;
iat 签发时间;
exp 过期时间;
nbf 在这个时间之前,该 JWT 都是不可用的,一般同签发时间 iat;
jti 唯一标识符,防止重放攻击。
sub 用户标识,这里是用户 ID
prv 扩展包自定义字段,模型名的哈希值,等于sha1(‘App\User’),用于区别不同的模型
- signature 是由服务器进行的签名,保证了 token 不被篡改
JWT 最后是通过 Base64 编码的,也就是说,它可以被翻译回原来的样子来的。所以不要在 JWT 中存放一些敏感信息。
3.signature 是由服务器进行的签名,保证了 token 不被篡改
这里使用的是tymon/jwt-auth,在 Laravel 中安装 tymon/jwt-auth 这个扩展包就可以很方便的使用 JWT 了
安装
安装tymon/jwt-auth
composer require tymon/jwt-auth
发布配置
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
生成secret
php artisan jwt:secret
这个命令会在 env 中增加一个 JWT_SECRET,secret 是十分重要的,用于给 Token 签名,更换这个 secret
会导致之前生成的所有 Token 无效,所以不要随意的更换这个secret

接入
创建 Token
需要修改一下 User 模型,在该模型中,需要实现扩展包提供的接口 Tymon\JWTAuth\Contracts\JWTSubject

实现两个方法
getJWTIdentifier 返回模型的 id
getJWTCustomClaims 存放自定义的数据用于放在 Token 中
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
结合 Laravel Auth
修改一下配置:config/auth.php
'guards' => [
'web' => [

文章介绍了JWT的基本概念和结构,包括头部、载荷和签名。在Laravel中,通过安装和配置tymon/jwt-auth扩展包,实现了JWT的创建、刷新、注销和获取用户信息的API接口,强调了JWT的安全性和生命周期管理。
最低0.47元/天 解锁文章
1449

被折叠的 条评论
为什么被折叠?



