首先我们需要知道什么是jwt 以及我们为什么要使用它
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密
jwt的组成
jwt有三部分组成
{
"type":"jwt",//加密类型
"alg":"HS256"//采用的加密算法
}
这部分头部信息采用base64URL加密,得到加密后的字符串
eyJ0eXBlIjoiand0IiwiYWxnIjoiSFMyNTYifQ==
我们暂且这部分得到的内容为 XXX 吧
{
"iss":"jwt签发者",
"sub":"jwt所面向的用户",
"aud":"接收jwt的一方",
"exp":"jwt的过期时间,这个过期时间必须要大于签发时间",
"nbf":"定义在什么时间之前,该jwt都是不可用的",
"iat":"jwt的签发时间",
"jti":"jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击"
}
这部分的内容是要求但不强制【有可以莫有也可以】
{
"name":"admin",
"id":"1"
}
加密后可能得到
eyJpc3MiOiJ3d3cubGdsZy54eXoiLCJzdWIiOiJhcGkiLCJhdWQiOiJhcGlfdXNlciIsImV4cCI6MTU0NDA0MDY3MSwibmJmIjoxNTQ5MjAzMDcxLCJpYXQiOjE1NDQwMTkwNzEsImp0aSI6IjEyMzQ1Njc4OSIsIm5hbWUiOiJhZG1pbiIsImlkIjoxfQ==
我们暂且称之为 yyy 吧
注意的哦,我们这些加密都是可逆的,所以有些隐私的数据,我们是不能放在这里面,不安全哦
HS256('header' . 'playload'.'secret');
//secre这是自定义的私钥,之后我们解密就是需要它的,所以要记好了哦
//签名的作用:保证 JWT 没有被篡改过
MzFhMzhlZjZhMzViZTBjYTU4ZjM2NzZhMGQ4MzNhNjRjMzM2MGQ4Zg==
那么我们呢所得到的token就是下面这样
eyJ0eXBlIjoiand0IiwiYWxnIjoiSFMyNTYifQ==.eyJpc3MiOiJ3d3cubGdsZy54eXoiLCJzdWIiOiJhcGkiLCJhdWQiOiJhcGlfdXNlciIsImV4cCI6MTU0NDA0MDY3MSwibmJmIjoxNTQ5MjAzMDcxLCJpYXQiOjE1NDQwMTkwNzEsImp0aSI6IjEyMzQ1Njc4OSIsIm5hbWUiOiJhZG1pbiIsImlkIjoxfQ==.MzFhMzhlZjZhMzViZTBjYTU4ZjM2NzZhMGQ4MzNhNjRjMzM2MGQ4Zg==
现在我们的token已经生成了,那我们怎么使用它呢,也是有两种方式的
http://localhost:8088/api/index?token=eyJ0eXBlIjoiand0IiwiYWxnIjoiSFMyNTYifQ==.eyJpc3MiOiJ3d3cubGdsZy54eXoiLCJzdWIiOiJhcGkiLCJhdWQiOiJhcGlfdXNlciIsImV4cCI6MTU0NDA0MDY3MSwibmJmIjoxNTQ5MjAzMDcxLCJpYXQiOjE1NDQwMTkwNzEsImp0aSI6IjEyMzQ1Njc4OSIsIm5hbWUiOiJhZG1pbiIsImlkIjoxfQ==.MzFhMzhlZjZhMzViZTBjYTU4ZjM2NzZhMGQ4MzNhNjRjMzM2MGQ4Zg=