jwt实现

<?phpnamespace 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);    }

}

实现:

<?phpnamespace 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;    }}

输出:

				
时间: 2024-10-10 14:18:08

jwt实现的相关文章

beego应用做纯API后端如何使用jwt实现无状态权限验证

jwt是什么,可以百度下其它文章,我原来看到一个讲的详细的,现在找不到了.先简单介绍下我个人的理解,就是一个token,只不过通过加密解密的手段,能让这一串字符带有一些简单的信息.这样解密jwt后不用查数据库,最常用的例子,保存用户权限,再多层的权限,其实只用一个数字,转换成二进制,每一位代表一种权限.类似这样的使用,还有保存session的key,通过该值查session就能获取更丰富的资料,用来保存用户状态也是可以的. 下面介绍下我的一个golang项目中使用beego框架做纯API接口使用

基于Token的身份验证——JWT(转)

本文转自:http://www.cnblogs.com/zjutzz/p/5790180.html 感谢作者 初次了解JWT,很基础,高手勿喷.基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为: A.B.C A由JWT头部信息header加密得到B由JWT用到的身份验证信息json数据加密得到C由A和B加密得到,是校验部分 怎样生成A? header格式为: { "typ

asp.net core 2.0 web api基于JWT自定义策略授权

JWT(json web token)是一种基于json的身份验证机制,流程如下: 通过登录,来获取Token,再在之后每次请求的Header中追加Authorization为Token的凭据,服务端验证通过即可能获取想要访问的资源.关于JWT的技术,可参考网络上文章,这里不作详细说明, 这篇博文,主要说明在asp.net core 2.0中,基于jwt的web api的权限设置,即在asp.net core中怎么用JWT,再次就是不同用户或角色因为权限问题,即使援用Token,也不能访问不该访

#51CTO学院四周年#详解JWT的结构与应用

1. JWT是什么? JWT,全称JSON WEB TOKEN, 是WEB客户端与服务器之间相互进行安全通信的规范.通信双方的对象本身通过JSON传递数据是不安全的,但是由于有了数字签名的存在,这些信息变的可信的. 2. JWT特点 简洁(Compact): 可以通过URL,POST参数或者在HTTP header发送,因为数据量小,传输速度也很快 自包含(Self-contained):负载中包含了所有用户所需要的信息,避免了多次查询数据库 3. JWT的应用场景 身份认证:当用户在客户端完成

spring security oauth2 jwt 认证和资源分离的配置文件(java类配置版)

最近再学习spring security oauth2.下载了官方的例子sparklr2和tonr2进行学习.但是例子里包含的东西太多,不知道最简单最主要的配置有哪些.所以决定自己尝试搭建简单版本的例子.学习的过程中搭建了认证和资源在一个工程的例子,将token存储在数据库的例子等等 .最后做了这个认证和资源分离的jwt tokens版本.网上找了一些可用的代码然后做了一个整理, 同时测试了哪些代码是必须的.可能仍有一些不必要的代码在,欢迎大家赐教. 一.创建三个spring boot 工程,分

REST API-- spring boot jwt

原文  https://juejin.im/post/58c29e0b1b69e6006bce02f4 通常情况下,把API直接暴露出去是风险很大的,不说别的,直接被机器攻击就喝一壶的.那么一般来说,对API要划分出一定的权限级别,然后做一个用户的鉴权,依据鉴权结果给予用户开放对应的API.目前,比较主流的方案有几种: 用户名和密码鉴权,使用Session保存用户鉴权结果. 使用OAuth进行鉴权(其实OAuth也是一种基于Token的鉴权,只是没有规定Token的生成方式) 自行采用Token

认证 协议 JWT OAuth Session Cookie

本文翻译自Auth-Boss. 如果有翻译的不恰当或不对的地方, 欢迎指出. 成为一个认证老司机, 了解网络上不同的身份认证方法. 本文档的目的是记录和编目Web上的身份验证方法.认证指的是创建一个系统的过程,用户可以通过该系统"登录"在线服务,并授予对受保护资源的访问权限.以下引用可能更好地总结我想要解释的内容: 客户端认证涉及向Web上的服务器证明客户端(或用户)的身份.[1] How 我写作风格简洁,会用到一些技术词. 免责声明:本文档不作为包含所有认证方法的网络的目录;本文档也

使用JWT的OAuth2的SSO分析

参考:https://github.com/spring-guides/tut-spring-security-and-angular-js/blob/master/oauth2/README.adoc http://jwt.io/introduction/ 本文在<使用OAuth2的SSO分析>文章的基础上扩展,使用jwt可减少了向认证服务器的请求,但jwt比swt(Simple Web Tokens)要长不少,还要依赖公钥解密. 1.浏览器向UI服务器点击触发要求安全认证 2.跳转到授权服

WebApi_基于Token的身份验证——JWT(z)

基于Token的身份验证——JWT JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为: A.B.C A由JWT头部信息header加密得到B由JWT用到的身份验证信息json数据加密得到C由A和B加密得到,是校验部分 怎样生成A? header格式为: { "typ": "JWT", "alg": "HS256" } 它就是一个json串,两个字段是必须的,不能多也不能少.alg字段指定了生成C的算法

REST Security with JWT using Java and Spring Security

Security Security is the enemy of convenience, and vice versa. This statement is true for any system, virtual or real, from the physical house entrance to web banking platforms. Engineers are constantly trying to find the right balance for the given