ThinkPHP5 使用 JWT 进行加密

使用 Github 的 firebase\JWT

- 使用 Composer 安装此扩展

- 代码示例

<?php

/**

 * [InterCommon-接口公用]

 * @Author   RainCyan

 * @DateTime 2019-08-12T16:38:08+0800

 */

namespace app\hladmin\controller;

use think\Controller;

use \Firebase\JWT\JWT;

class InterCommonController extends Controller {

    private $key = "123456789";

    //客户端获取TOKEN

    public function _getJwtToken(){

        try {

            $string = input("string");

            if (empty($string)) {

                throw new \Exception("请传入需要加密string", -105);

            }

            $jwt = $this->_setJwtToken($string);

            throw new \Exception($jwt, 200);

        } catch (\Exception $e) {

            return json(array("code"=>$e->getCode(), "msg"=>$e->getMessage()));

        }

    }

    //签发token

    private function _setJwtToken($string=""){

        $key = $this->key;

        $time = time();

        $token = array(

            "iss" => "http://ml.cn",

            "aud" => "http://ml.cn",

            ‘iat‘ => $time, //签发时间

            ‘nbf‘ => $time + 10, //在什么时间之后该jwt才可用

            ‘exp‘ => $time + 10, //过期时间

            "string" => $string

        );

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

        return $jwt;

    }

    //解析token

    protected function _readJwtToken($jwt){

        $key = $this->key;

        try {

            JWT::$leeway = 60;//当前时间减去60,把时间留点余地

            $decoded = JWT::decode($jwt, $key, [‘HS256‘]); //HS256方式,这里要和签发的时候对应

            $arr = (array)$decoded;

            return json_msg(200, "success", $arr);

        } catch(\Firebase\JWT\SignatureInvalidException $e) {  //签名不正确

            return json_msg(-101, $e->getMessage());

        }catch(\Firebase\JWT\BeforeValidException $e) {  // 签名在某个时间点之后才能用

            return json_msg(-102, $e->getMessage());

        }catch(\Firebase\JWT\ExpiredException $e) {  // token过期

            return json_msg(-103, $e->getMessage());

        }catch(Exception $e) {  //其他错误

            return json_msg(-104, $e->getMessage());

        }

    }

    //测试解析

    public function _writeJwtToken($token){

        halt($this->_readJwtToken($token));

    }

}

?>

链接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5

免费分享,但是X度限制严重,如若链接失效点击链接或搜索加群 群号518475424

 

原文地址:https://www.cnblogs.com/it-3327/p/11743192.html

时间: 2024-10-13 06:46:39

ThinkPHP5 使用 JWT 进行加密的相关文章

JWT(JSON Web Token) 多网站的单点登录,放弃session

多个网站之间的登录信息共享, 一种解决方案是基于cookie - session的登录认证方式,这种方式跨域比较复杂. 另一种替代方案是采用基于算法的认证方式, JWT(json web token)的方式. 参考链接: http://www.tuicool.com/articles/IRJnaa https://coderwall.com/p/8wrxfw/goodbye-php-sessions-hello-json-web-tokens 一.概念和定义 1.什么是jwt? Json web

什么是JWT(JSON WEB TOKEN)

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

理解JWT(JSON Web Token)认证

最近想做个小程序,需要用到授权认证流程.以前项目都是用的 OAuth2 认证,但是Sanic 使用OAuth2 不太方便,就想试一下 JWT 的认证方式.这一篇主要内容是 JWT 的认证原理,以及python 使用 jwt 认识的实践. 几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth 在HTTP中,基本认证是一种用来允许Web浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式,通常用户名和明码会通过HTTP头传递. 在发送之前是以用

深入浅出JWT(JSON Web Token )

原文:深入浅出JWT(JSON Web Token ) 1. JWT 介绍 JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用于在各方之间以JSON对象安全传输信息. 这些信息可以通过数字签名进行验证和信任. 可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥对对JWT进行签名. 虽然JWT可以加密以提供各方之间的保密性,但我们将重点关注已签名的令牌. 签名的令牌可以验证其中包含的

JWT入门简介

官网:https://jwt.io/ 文档:https://jwt.io/introduction/ 目录 什么是JWT 头部(Header) 载荷(Payload) 签名(Signature) JWT使用场景 如何传递JWT JWT应用实践 总结 JWT运行流程 与传统Session方式的比较 使用JWT时注意事项 什么是JWT JWT是"JSON Web Token"的英文缩写,是一种开放的工业标准方法(RFC 7519),用于在网络应用环境中安全地传递声明信息.虽然JWT的名称中

JWT应用

调试器库简介问一件T恤! 精心制作 JSON Web令牌简介 新:免费获得JWT手册并深入学习JWT! 什么是JSON Web Token? JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以在各方之间作为JSON对象安全地传输信息.此信息可以通过数字签名进行验证和信任.JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名. 虽然JWT可以加密以在各方之间提供保密,但我们将专注于签名令牌.签名令牌可以验证其

JWT简介

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法. 一.跨域认证的问题 互联网服务离不开用户认证.一般流程是下面这样. 1.用户向服务器发送用户名和密码. 2.服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色.登录时间等等. 3.服务器向用户返回一个 session_id,写入用户的 Cookie. 4.用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器. 5.服务器收到 session

SpringBoot集成JWT实现token验证

原文:https://www.jianshu.com/p/e88d3f8151db JWT官网: https://jwt.io/ JWT(Java版)的github地址:https://github.com/jwtk/jjwt 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息.因为数字签名的存在,这些信息是可信的,JWT

jwt https://mp.weixin.qq.com/s/8FdzMq4msyhqE9Rrhgwqjw

使用JWT来实现对API的授权访问 Beginner java思维导图 前天 什么是JWT JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以在各个系统之间用JSON作为对象安全地传输信息,并且可以保证所传输的信息不会被篡改. JWT通常有两种应用场景: 授权.这是最常见的JWT使用场景.一旦用户登录,每个后续请求将包含一个JWT,作为该用户访问资源的令牌. 信息交换.可以利用JWT在各个系统之间安全地传输信息,JWT的特性使得接收方可以