JWT thinkphp6.0.7中如何使用

  

本篇内容介绍了“thinkphp6.0.7中如何使用JWT”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

<强> JWT是什么

JWT是json web标记缩写。它将用户信息加密到令牌里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证令牌的正确性,只要正确即通过验证。基于令牌的身份验证可以替代传统的饼干+会话身份验证方法。

<>强基于会话的登录认证

在传统的用户登录认证中,因为http是无状态的,所以都是采用会话方式。用户登录成功,服务端会保证一个会话,当然会给客户端一个sessionId,客户端会把sessionId保存在饼干中,每次请求都会携带这个sessionId。

饼干+会话这种模式通常是保存在内存中,而且服务从单服务到多服务会面临的会议共享问题,随着用户量的增多,开销就会越大。而JWT不是这样的,只需要服务端生成令牌,客户端保存这个令牌,每次请求携带这个令牌,服务端认证解析就可。

<强> JWT由三个部分组成:header.payload。签名

页眉部分:

,,{   ,,,,,“alg":,“HS256"   ,,,,,“typ":,“JWT"   ,,,} 对应base64UrlEncode编码为:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9   说明:该字段为json格式.alg字段指定了生成签名的算法,默认值为,HS256, typ默认值为JWT

有效载荷部分:

,,,,{   ,,,,,“sub":,“1234567890”,   ,,,,,“name":,“John  Doe"   ,,,,,“iat": 1516239022   ,,,} 对应base64UrlEncode编码为:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ   说明:该字段为json格式,表明用户身份的数据,可以自己自定义字段,很灵活.sub 面向的用户,name 姓名,,iat 签发时间,例如可自定义示例如下: ,,{   ,,,,,,,“iss":,“admin",,,,,,,,,,,,//该JWT的签发者   ,,,,,,,“sub":,“www.admin.com",,,,,//面向的用户   ,,,,,,,“澳大利亚”:,“zhangsan",,,,,,,,,//接收jwt的一方   ,,,,,,,“iat":, 1535967430,,,,,,,,,//签发时间   ,,,,,,,“exp":, 1535974630,,,,,,,,,//过期时间   ,,,,,,,“nbf":, 1535967430,,,,,,,,,//该时间之前不接收处理该Token    ,,,,,,,“jti":,“9 f10e796726e332cec401c569969e13e",,,//该令牌唯一标识   ,,,}

<强>签名部分:

,,,,HMACSHA256 (   ,,,,,base64UrlEncode(头),+,“干净+   ,,,,,base64UrlEncode(载荷),   ,,,,,123456   ,,,) 对应的签名为:keH6T3x1z7mmhKL1T3r9sQdAxxdzB6siemGMr_6ZOwU      最终得到的智威汤逊的标记为(header.payload.signature): eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.keH6T3x1z7mmhKL1T3r9sQdAxxdzB6siemGMr_6ZOwU   说明:对报头和有效载荷进行base64UrlEncode编码后进行拼接。通过关键(这里是123456)进行HS256算法签名。

<强> JWT使用流程

初次登录:用户初次登录,输入用户名密码   密码验证:服务器从数据库取出用户名和密码进行验证   生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT   返还JWT:服务器的HTTP 响应中将JWT返还   带JWT的请求:以后客户端发起请求,HTTP 请求   标题中的Authorizatio字段都要有值,为JWT   服务器验证JWT

<强> JWT版本

php中JWT有多个版本:我选择的是最新版本。别问为什么,你买电子产品都是买新不买旧呢。

<>强安装JWT

1,使用作曲家安装

作曲家需要lcobucci/JWT

2,从github上下载

点我跳转到github地址:https://github.com/lcobucci/jwt

依赖

PHP  5.5 +   OpenSSL扩展

使用

参数解释

在使用之前先解释下上面参数的意思:
名称解释
iss(发行人)发行人请求实体,可以是发起请求的用户的信息,也可是jwt的签发者
子(主题)设置主题,类似于发邮件时的主题
澳元(观众)接收jwt的一方
exp(过期)令牌过期时间
nbf(不是之前)当前时间在nbf设定时间之前,该令牌无法使用
iat(发行)令牌创建时间
jti (jwt ID)对当前令牌设置唯一标示

<强> PHP如何实现jwt

JWT thinkphp6.0.7中如何使用