jwt实现
<?php
namespace app\admin\controller;
use think\Config;
use think\Controller;
use think\Request;
use think\cache\driver\Redis;
/**
* Class Base
* @package app\admin\controller
*/
class Base extends Controller
{
/**
* Base constructor.
* @param Request|null $request
*/
public function __construct(Request $request = null)
{
not_region(true);//允许
parent::__construct($request);
}
static function getAdminKey()
{
$admin_key = Config::get('key')["admin_key"];
return $admin_key;
}
/**
* @var
*/
protected $head;
/**
* @var
*/
protected $payload;
/**
* @param string $iss 发行者
* @param string $exp 过期时间
* @param $uid int 用户id
* @return array
*/
protected function payload($uid)
{
$this->payload = [
'iss'=>request()->domain(),
'exp'=>time(),
'uid'=>$uid,
];
return $this->payload;
}
protected function head()
{
$this->head = [
'type'=>"JWT",
'alg'=>'HA256',
];
return $this->head ;
}
/**
* @param $str
* @return string
*/
static function baseEn($str)
{
return base64_encode($str);
}
/**
* @param $str
* @return string
*/
static function baseDe($str)
{
return base64_decode($str);
}
/**
* @param $strdata
* @return string
*/
static function hash_hmac($strdata)
{
$hashSha256 = self::baseEn(hash_hmac("sha256",$strdata,"secret",true));
return $hashSha256;
}
/**
* @param array $head $this->head();/other
* @param array $payload $this->payload();/other
* @return string
*/
static function base64_meger($head=[],$payload=[],$redis)
{
$new_arr = [];
foreach (func_get_args() as $keies)
{
if(is_array($keies)){
$new_arr[] = self::baseEn(json_encode($keies));
}
}
$new_signature = implode('.',$new_arr);
// ----------- 签名生成------
$signature = self::hash_hmac($new_signature);
// ------------保存签名------
self::setRedis($redis,$signature);
$token = $new_signature.'.'.$signature;
return $token;
}
/**
*
* @param Redis $redis
* @param $signature
* @return bool
*/
protected static function setRedis($redis,$signature)
{
return $redis->set(self::getAdminKey(),$signature);
}
}
实现:
<?php
namespace app\admin\controller;
use think\cache\driver\Redis;
/**
* Class Index
* @package app\admin\controller
*/
class Index extends Base
{
public function index(Redis $redis)
{
$token = $this::base64_meger($this->head(),$this->payload(2),$redis);
return $token;
}
}
输出:
jwt实现的更多相关文章
- 看图理解JWT如何用于单点登录
单点登录是我比较喜欢的一个技术解决方案,一方面他能够提高产品使用的便利性,另一方面他分离了各个应用都需要的登录服务,对性能以及工作量都有好处.自从上次研究过JWT如何应用于会话管理,加之以前的项目中也 ...
- JWT实现token-based会话管理
上文<3种web会话管理的方式>介绍了3种会话管理的方式,其中token-based的方式有必要从实现层面了解一下.本文主要介绍这方面的内容.上文提到token-based的实现目前有一个 ...
- 用JWT来保护我们的ASP.NET Core Web API
在上一篇博客中,自己动手写了一个Middleware来处理API的授权验证,现在就采用另外一种方式来处理这个授权验证的问题,毕竟现在也 有不少开源的东西可以用,今天用的是JWT. 什么是JWT呢?JW ...
- Laravel-lumen 配置JWT
具体步骤参照: [ JWT & Lumen ] 第一步 在项目根目录 执行命令 composer require tymon/jwt-auth第二步 在 bootstrap/app.php 的 ...
- .net core Jwt 添加
Jwt 已经成为跨平台身份验证通用方案,如不了解请关注:https://jwt.io/. 为了和微软其他验证模块有个比较好的衔接,项目中采用了微软开发的jwt组件: System.IdentityMo ...
- 多说评论系统API调用和本地身份说明(JWT)
多说评论系统是一个非常好用的第三方评论插件,聚合了大多数的SNS平台账号登录和分享功能,UI也很不错. 作为网站快速接入评论系统,多说是一个比较好的选择,其也提供了一些实用的API去满足定制化需求. ...
- 【JWT】JWT+HA256加密 Token验证
目录 Token验证 传统的Token验证 JWT+HA256验证 回到顶部 Token验证 最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twi ...
- 基于Token的身份验证——JWT
初次了解JWT,很基础,高手勿喷. 基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符 ...
- jwt refresh token
$app->post('auth/refresh-token', ['middleware' => 'jwt.refresh', function() { try { $old_token ...
- JWT【JSON Web Token】 简述
draft: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html http://tools.ietf.org/html/ ...
随机推荐
- 295B - Greg and Graph (floyd逆序处理)
题意:给出任意两点之间的距离,然后逐个删除这些点和与点相连的边,问,在每次删除前的所有点对的最短距离之和 分析:首先想到的是floyd,但是如果从前往后处理,复杂度是(500)^4,超时,我们从后往前 ...
- Comet OJ 热身赛(E题)(处理+最短路算法)
dijkstra 已经提交 已经通过 42.86% Total Submission:189 Total Accepted:81 题目描述 Eagle Jump公司正在开发一款新的游戏.泷本一二三作为 ...
- Eclipse中Git的使用以及IDEA中Git的使用
一.Eclipse中Git解决冲突步骤: 1.进行文件对比,将所有的文件添加到序列. 2.commit文件到本地仓库. 3.pull将远程仓库的代码更新到本地,若有冲突则会所有的文件显示冲突状态(真正 ...
- 打开指定测试App的指定Activity
那究竟应该如何让appium去自动找到指定的APP和指定的Activity呢?想要打开指定的App,需要知道App的包名,同样想要打开指定Activity也需要知道其名,如何获取? 1.问公司的开发人 ...
- 使用HttpUtils完成Http Basic 认证
调用声网(agora)的远程接口(Restful Api)时,对方需要使用Basic Auth的方式进行认证(需要输入用户名和密码). 一,使用Postman完成基于Basic Auth的Http认证 ...
- WIN10 devtoolsuser
visual studio - UWP: What is the DevToolsUser Password? - Stack Overflowhttps://stackoverflow.com/qu ...
- fiddler查看IP地址和请求响应时间
(一)fiddler查看IP地址 1.点击菜单栏rules——customize rules… 2.ctrl+f搜索“static function main” 3.在main函数里加入下面一行代码, ...
- 【Python3练习题 013】 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字
a=input('输入数字>>>') count=int(input('几个数字相加>>>')) ret=[] for i in range(1,count+1): ...
- react 路由4 学习
表单控件 受控表单组件 非受控的表单组件 demo:收集表单提交的数据 路由(V4) 特点:一切皆是组件 官网:https://reacttraining.com/react-router/ npm ...
- 面试题(校招java)
1:linux线程和进程的区别? 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程 ...