分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

JWT在PHP使用及问题处理

发布时间:2023-09-06 02:12责任编辑:熊小新关键词:PHP

官网 https://jwt.io/

3.0版本 https://github.com/lcobucci/jwt

安装

composer require lcobucci/jwt

依赖

  • PHP 5.5+ (v3.2) and PHP 7.1 (v4.x)
  • OpenSSL Extension

示例

<?phpuse \Lcobucci\JWT\Builder;use \Lcobucci\JWT\Signer\Hmac\Sha256;include "../vendor/autoload.php";$builder = new Builder();$signer ?= new Sha256();$secret = "XXXXXXXXXXXXXXXXXXXXX";//设置header和payload,以下的字段都可以自定义$builder->setIssuer("XXX.com") //发布者 ???????->setAudience("XXX.com") //接收者 ???????->setId("abc", true) //对当前token设置的标识 ???????->setIssuedAt(time()) //token创建时间 ???????->setExpiration(time() + 60) //过期时间 ???????->setNotBefore(time() + 5) //当前时间在这个时间前,token不能使用 ???????->set(‘uid‘, 30061); //自定义数据//设置签名$builder->sign($signer, $secret);//获取加密后的token,转为字符串$token = (string)$builder->getToken();var_dump($token);

验证token

<?phpuse \Lcobucci\JWT\Parser;use \Lcobucci\JWT\Signer\Hmac\Sha256;include "../vendor/autoload.php";$signer ?= new Sha256();$secret = "XXXXXXXXXXXXXXXXXXXXX";//获取token$token = isset($_SERVER[‘HTTP_AUTHORIZATION‘]) ? $_SERVER[‘HTTP_AUTHORIZATION‘] : ‘‘;if (!$token) { ???invalidToken(‘Invalid token‘);}try { ???//解析token ???$parse = (new Parser())->parse($token); ???//验证token合法性 ???if (!$parse->verify($signer, $secret)) { ???????invalidToken(‘Invalid token‘); ???} ???//验证是否已经过期 ???if ($parse->isExpired()) { ???????invalidToken(‘Already expired‘); ???} ???//获取数据 ???var_dump($parse->getClaims());} catch (Exception $e) { ???//var_dump($e->getMessage()); ???invalidToken(‘Invalid token‘);}function invalidToken($msg) { ???header(‘HTTP/1.1 403 forbidden‘); ???exit($msg);}

问题

在开发APP API的过程中发现,服务端无法进行OAuth2.0认证,具体表现为无法获取Authorization Header头信息

解决方案1:

SetEnvIf Authorization “(.*)” HTTP_AUTHORIZATION=$1

这是apache文档对它的定义,mod_setenvif模块允许根据请求的不同方面匹配指定的正则表达式来设置环境变量。这些环境变量可由服务器的其他部分使用。

解决方案2:

Laravel文档中说如果用户名/密码没有进行base64编码那么Apache似乎会摒弃Authorization头,要修复这一问题可以添加如下代码到Apache配置文件,具体原理同方案1

RewriteEngine OnRewriteCond %{HTTP:Authorization} ^(.*)RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

解决方案3:

将token信息包含到URL中

http://api.yoursite.com/?token={yourtokenhere}

作者:旧旧的 <393210556@qq.com> 解决问题的方式,就是解决它一次

JWT在PHP使用及问题处理

原文地址:https://www.cnblogs.com/widgetbox/p/9543678.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved