PHP使用laravel的jwt-token(二)

PHP使用laravel的jwt-token(二)

首先我们需要知道什么是jwt 以及我们为什么要使用它

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密

jwt的组成
jwt有三部分组成

  1. header 【头部】
  2. playload 【荷载】
  3. signature 【签证信息】
  • header
    它也是一个json字符串,主要有两部分【我自己叫它类型和加密方式】
{
   "type":"jwt",//加密类型
   "alg":"HS256"//采用的加密算法
}

这部分头部信息采用base64URL加密,得到加密后的字符串

eyJ0eXBlIjoiand0IiwiYWxnIjoiSFMyNTYifQ==

我们暂且这部分得到的内容为 XXX 吧

  • playload
    荷载可以分为三种类型
  • 第一种是标准中注册是声明【预定义荷载】
{
"iss":"jwt签发者",
"sub":"jwt所面向的用户",
"aud":"接收jwt的一方",
"exp":"jwt的过期时间,这个过期时间必须要大于签发时间",
"nbf":"定义在什么时间之前,该jwt都是不可用的", 
"iat":"jwt的签发时间",
"jti":"jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击"
}

这部分的内容是要求但不强制【有可以莫有也可以】

  • 第二种是公有荷载
    在使用 JWT 时可以额外定义的载荷。为了避免冲突,应该使用 IANA JSON Web Token Registry 中定义好的,或者给额外载荷加上类似命名空间的唯一标识。
  • 第三种是私有荷载
    这部分可以自己定义的哦
{
   "name":"admin",
   "id":"1"
}

加密后可能得到

eyJpc3MiOiJ3d3cubGdsZy54eXoiLCJzdWIiOiJhcGkiLCJhdWQiOiJhcGlfdXNlciIsImV4cCI6MTU0NDA0MDY3MSwibmJmIjoxNTQ5MjAzMDcxLCJpYXQiOjE1NDQwMTkwNzEsImp0aSI6IjEyMzQ1Njc4OSIsIm5hbWUiOiJhZG1pbiIsImlkIjoxfQ==

我们暂且称之为 yyy 吧
注意的哦,我们这些加密都是可逆的,所以有些隐私的数据,我们是不能放在这里面,不安全哦

  • signature
    这个部分就是我们把前面的得到的两部分拼接起来,然后再拼接上我们自定义的一个字符床,采用我们头部中定义的加密算法加密,然后再采用编码格式编码,救得到最后一截了
    如下
HS256('header' . 'playload'.'secret');
//secre这是自定义的私钥,之后我们解密就是需要它的,所以要记好了哦
//签名的作用:保证 JWT 没有被篡改过

MzFhMzhlZjZhMzViZTBjYTU4ZjM2NzZhMGQ4MzNhNjRjMzM2MGQ4Zg==

那么我们呢所得到的token就是下面这样

eyJ0eXBlIjoiand0IiwiYWxnIjoiSFMyNTYifQ==.eyJpc3MiOiJ3d3cubGdsZy54eXoiLCJzdWIiOiJhcGkiLCJhdWQiOiJhcGlfdXNlciIsImV4cCI6MTU0NDA0MDY3MSwibmJmIjoxNTQ5MjAzMDcxLCJpYXQiOjE1NDQwMTkwNzEsImp0aSI6IjEyMzQ1Njc4OSIsIm5hbWUiOiJhZG1pbiIsImlkIjoxfQ==.MzFhMzhlZjZhMzViZTBjYTU4ZjM2NzZhMGQ4MzNhNjRjMzM2MGQ4Zg==

现在我们的token已经生成了,那我们怎么使用它呢,也是有两种方式的

  • 添加在header中
    建议用这种,因为在 https 情况下更安全:Authorization:Bearer 你的token
  • 添加在url后面,当作一个参数请求
http://localhost:8088/api/index?token=eyJ0eXBlIjoiand0IiwiYWxnIjoiSFMyNTYifQ==.eyJpc3MiOiJ3d3cubGdsZy54eXoiLCJzdWIiOiJhcGkiLCJhdWQiOiJhcGlfdXNlciIsImV4cCI6MTU0NDA0MDY3MSwibmJmIjoxNTQ5MjAzMDcxLCJpYXQiOjE1NDQwMTkwNzEsImp0aSI6IjEyMzQ1Njc4OSIsIm5hbWUiOiJhZG1pbiIsImlkIjoxfQ==.MzFhMzhlZjZhMzViZTBjYTU4ZjM2NzZhMGQ4MzNhNjRjMzM2MGQ4Zg=

你可能感兴趣的:(laravel)