立即注册 找回密码

QQ登录

只需一步,快速开始

第一站长论坛

搜索
1框架
查看: 58|回复: 0

php实现JWT(json web token)鉴权实例详解

[复制链接]
发表于 2019-11-24 04:26 | 显示全部楼层 |阅读模式
JWT是什么

JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法。
JWT由三个部分组成:header.payload.signature
以下示例以JWT官网为例

header部分:
  1. { "alg": "HS256", "typ": "JWT"}
复制代码
对应base64UrlEncode编码为:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

说明:该字段为json格式。alg字段指定了生成signature的算法,默认值为 HS256,typ默认值为JWT
payload部分:
  1. { "sub": "1234567890", "name": "John Doe", "iat": 1516239022}
复制代码
对应base64UrlEncode编码为:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

说明:该字段为json格式,表明用户身份的数据,可以自己自定义字段,很灵活。sub 面向的用户,name 姓名 ,iat 签发时间。例如可自定义示例如下:
  1. {  "iss": "admin",     //该JWT的签发者  "iat": 1535967430,    //签发时间  "exp": 1535974630,    //过期时间  "nbf": 1535967430,     //该时间之前不接收处理该Token  "sub": "www.admin.com",  //面向的用户  "jti": "9f10e796726e332cec401c569969e13e"  //该Token唯一标识}
复制代码
signature部分:
  1. HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), 123456)
复制代码
对应的签名为:keH6T3x1z7mmhKL1T3r9sQdAxxdzB6siemGMr_6ZOwU
最终得到的JWT的Token为(header.payload.signature):eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.keH6T3x1z7mmhKL1T3r9sQdAxxdzB6siemGMr_6ZOwU
说明:对header和payload进行base64UrlEncode编码后进行拼接。通过key(这里是123456)进行HS256算法签名。
JWT使用流程

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

作者使用的是PHP 7.0.31,不废话,直接上代码,新建jwt.php,复制粘贴如下:
[code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站长论坛 ( 闽ICP备16019670号 )

GMT+8, 2019-12-6 03:16 , Processed in 0.107868 second(s), 20 queries .

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc & Style Design

本站提供网上自由讨论使用,所有言论内容来自互联网并不代表本站立场,本站不负任何责任.
如发现有侵权行为,请与我们联系. 我们将立刻从网站上删除,并向所有持版权者致最深歉意.
联系QQ:2837195923

快速回复 返回顶部 返回列表