热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpjwt使用案例,记一次PHP使用JWT

从https:jwt.io中找到目前github上目前star最多的jwt包:PHP-JWTAsimplelibrarytoencodeanddecodeJSONWe

从https://jwt.io/中找到目前github上目前star最多的jwt包:

PHP-JWT

A simple library to encode and decode JSON Web Tokens (JWT) in PHP, conforming to RFC 7519.

Installation

Use composer to manage your dependencies and download PHP-JWT:

composer require firebase/php-jwt

Example

use \Firebase\JWT\JWT;

$key = "example_key";

$payload = array(

"iss" => "http://example.org",

"aud" => "http://example.com",

"iat" => 1356999524,

"nbf" => 1357000000

);

/**

* IMPORTANT:

* You must specify supported algorithms for your application. See

* https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40

* for a list of spec-compliant algorithms.

*/

$jwt = JWT::encode($payload, $key);

$decoded = JWT::decode($jwt, $key, array('HS256'));

print_r($decoded);

/*

NOTE: This will now be an object instead of an associative array. To get

an associative array, you will need to cast it as such:

*/

$decoded_array = (array) $decoded;

/**

* You can add a leeway to account for when there is a clock skew times between

* the signing and verifying servers. It is recommended that this leeway should

* not be bigger than a few minutes.

*

* Source: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#nbfDef

*/

JWT::$leeway = 60; // $leeway in seconds

$decoded = JWT::decode($jwt, $key, array('HS256'));

?>

Example with RS256 (openssl)

use \Firebase\JWT\JWT;

$privateKey &#61; <<

-----BEGIN RSA PRIVATE KEY-----

MIICXAIBAAKBgQC8kGa1pSjbSYZVebtTRBLxBz5H4i2p/llLCrEeQhta5kaQu/Rn

vuER4W8oDH3&#43;3iuIYW4VQAzyqFpwuzjkDI&#43;17t5t0tyazyZ8JXw&#43;KgXTxldMPEL9

5&#43;qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4ehde/zUxo6UvS7UrBQIDAQAB

AoGAb/MXV46XxCFRxNuB8LyAtmLDgi/xRnTAlMHjSACddwkyKem8//8eZtw9fzxz

bWZ/1/doQOuHBGYZU8aDzzj59FZ78dyzNFoF91hbvZKkg&#43;6wGyd/LrGVEB&#43;Xre0J

Nil0GReM2AHDNZUYRv&#43;HYJPIOrB0CRczLQsgFJ8K6aAD6F0CQQDzbpjYdx10qgK1

cP59UHiHjPZYC0loEsk7s&#43;hUmT3QHerAQJMZWC11Qrn2N&#43;ybwwNblDKv&#43;s5qgMQ5

5tNoQ9IfAkEAxkyffU6ythpg/H0Ixe1I2rd0GbF05biIzO/i77Det3n4YsJVlDck

ZkcvY3SK2iRIL4c9yY6hlIhs&#43;K9wXTtGWwJBAO9Dskl48mO7woPR9uD22jDpNSwe

k90OMepTjzSvlhjbfuPN1IdhqvSJTDychRwn1kIJ7LQZgQ8fVz9OCFZ/6qMCQGOb

qaGwHmUK6xzpUbbacnYrIM6nLSkXgOAwv7XXCojvY614ILTK3iXiLBOxPu5Eu13k

eUz9sHyD6vkgZzjtxXECQAkp4Xerf5TGfQXGXhxIX52yH&#43;N2LtujCdkQZjXAsGdm

B2zNzvrlgRmgBrklMTrMYgm1NPcW&#43;bRLGcwgW2PTvNM&#61;

-----END RSA PRIVATE KEY-----

EOD;

$publicKey &#61; <<

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8kGa1pSjbSYZVebtTRBLxBz5H

4i2p/llLCrEeQhta5kaQu/RnvuER4W8oDH3&#43;3iuIYW4VQAzyqFpwuzjkDI&#43;17t5t

0tyazyZ8JXw&#43;KgXTxldMPEL95&#43;qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4

ehde/zUxo6UvS7UrBQIDAQAB

-----END PUBLIC KEY-----

EOD;

$payload &#61; array(

"iss" &#61;> "example.org",

"aud" &#61;> "example.com",

"iat" &#61;> 1356999524,

"nbf" &#61;> 1357000000

);

$jwt &#61; JWT::encode($payload, $privateKey, &#39;RS256&#39;);

echo "Encode:\n" . print_r($jwt, true) . "\n";

$decoded &#61; JWT::decode($jwt, $publicKey, array(&#39;RS256&#39;));

/*

NOTE: This will now be an object instead of an associative array. To get

an associative array, you will need to cast it as such:

*/

$decoded_array &#61; (array) $decoded;

echo "Decode:\n" . print_r($decoded_array, true) . "\n";

?>

构建自定义类

namespace app\lib\tools;

use \Firebase\JWT\JWT;

/**

* 单例 一次请求中所有使用jwt的地方都是一个用户

*

*/

class JwtAuth

{

private $token;

private static $instance;

private $iss &#61; &#39;api.tets.com&#39;; //签发人

private $aud &#61; &#39;api.tets.com&#39;; //受众

private $key &#61; &#39;#dsafasieg92fsdyhb3290&$#%#&#64;342&#39;;

private $uid;

/**

* 单例模式 JwtAuth句柄

*/

public static function getInstance()

{

if (is_null(self::$instance)) {

self::$instance &#61; new self();

}

return self::$instance;

}

private function __construct()

{

}

private function __clone(){

}

public function encode()

{

$time &#61; time();

$payload &#61; array(

"iss" &#61;> $this->iss,

"aud" &#61;> $this->aud,

"iat" &#61;> $time,

"nbf" &#61;> $time,

"uid" &#61;> $this->uid

);

$this->token &#61; $jwt &#61; JWT::encode($payload, $this->key);

return $this;

}

public function getToken()

{

return (string)$this->token;

}

public function setToken($token)

{

$this->token &#61; $token;

return $this;

}

public function setUid($uid)

{

$this->uid &#61; $uid;

return $this;

}

}

public function decode()

{

$token &#61; Request::instance()->param(&#39;token&#39;);

$key &#61; &#39;#dsafasieg92fsdyhb3290&$#%#&#64;342&#39;;

// JWT::$leeway &#61; 60; // $leeway in seconds

$decoded &#61; JWT::decode($token, $key, array(&#39;HS256&#39;));

dd ($decoded);

}

public function login()

{

//通过认证后获取uid为304

$uid &#61; 304;

$jwtAuth &#61; JwtAuth::getInstance();

$token &#61; $jwtAuth->setUid($uid)->encode()->getToken();

return [

&#39;status&#39; &#61;> 100,

&#39;message&#39; &#61;> &#39;成功&#39;,

&#39;token&#39; &#61;> $token

];

}



推荐阅读
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
author-avatar
PAISONG_675
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有