php自定义token类并将生成的token放在http请求头的Authorization中的代码
发布时间:2019-10-23 18:26:14 来源: 点击:
本篇文章给大家带来的内容是关于php自定义token类并将生成的token放在http请求头的Authorization中的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
今天在使用laravel写东西的时候,需要与前端交互,看了jwt(json web token),于是自己想试着写一个简单的token类,token中存储了成员id和成员的权限,与前端交互时,将生成的token放在http请求头的Authorization中,整理如下:
【转载自php中文网:https://www.php.cn/php-weizijiaocheng-408399.html】
今天在使用laravel写东西的时候,需要与前端交互,看了jwt(json web token),于是自己想试着写一个简单的token类,token中存储了成员id和成员的权限,与前端交互时,将生成的token放在http请求头的Authorization中,整理如下:
- <?php
- namespace App\Http\Controllers\Auth;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- class TokenController extends Controller{
- /**
- * header
- * @var array
- */
- private static $header = [
- "type" => "token",
- "alg" => "HS256"
- ]; /**
- * create payload
- * @param $memberId
- * @param $permission
- * @return array
- */
- private static function payload($memberId, $permission)
- {
- return [
- "iss" => "http://api.creatshare.com",
- "iat" => $_SERVER['REQUEST_TIME'],
- "exp" => $_SERVER['REQUEST_TIME'] + 7200,
- "GivenName" => "CreatShare",
- "memberId" => $memberId,
- "permission"=> $permission
- ];
- } /**
- * encode data
- * @param $data
- * @return string
- */
- private static function encode($data)
- {
- return base64_encode(json_encode($data));
- } /**
- * generate a signature
- * @param $header
- * @param $payload
- * @param string $secret
- * @return string
- */
- private static function signature($header, $payload, $secret = 'secret')
- {
- return hash_hmac('sha256', $header.$payload, $secret);
- } /**
- * generate a token
- * @param $memberId
- * @param $permission
- * @return string
- */
- public static function createToken($memberId, $permission)
- {
- $header = self::encode(self::$header);
- $payload = self::encode(self::payload($memberId, $permission));
- $signature = self::signature($header, $payload);
- return $header . '.' .$payload . '.' . $signature;
- } /**
- * check a token
- * @param $jwt
- * @param string $key
- * @return array|string
- */
- public static function checkToken($jwt, $key = 'secret')
- {
- $token = explode('.', $jwt);
- if (count($token) != 3)
- return 'token invalid';
- list($header64, $payload64, $sign) = $token;
- if (self::signature($header64 , $payload64) !== $sign)
- return 'token invalid';
- $header = json_decode(base64_decode($header64), JSON_OBJECT_AS_ARRAY);
- $payload = json_decode(base64_decode($payload64), JSON_OBJECT_AS_ARRAY);
- if ($header['type'] != 'token' || $header['alg'] != 'HS256')
- return 'token invalid';
- if ($payload['iss'] != 'http://api.creatshare.com' || $payload['GivenName'] != 'CreatShare')
- return 'token invalid';
- if (isset($payload['exp']) && $payload['exp'] < time())
- return 'timeout';
- return [
- 'memberId' => $payload['memberId'],
- 'permission' =>$payload['permission']
- ];
- } /**
- * get a token
- * @return null
- */
- public static function getToken()
- {
- $token = null;
- if (isset($_SERVER['HTTP_AUTHORIZATION']))
- $token = $_SERVER['HTTP_AUTHORIZATION'];
- return $token;
- }
- }
- $token = Token::createToken($member_id, $member_permission); //创建一个
- token$token = Token::getToken(); //从http请求头获取
- token$result = Token::checkToken(); //解析token
【转载自php中文网:https://www.php.cn/php-weizijiaocheng-408399.html】
上一篇:php接口的token详解
精彩推荐相关内容
- (2019-10-23)php自定义token类并将生成的token放在ht...
- (2019-11-01)php中curl模拟post提交多维数组
- (2019-08-30)phpcms封装的微信h5支付源码DEMO参考
- (2020-12-06)微信之微信支付(封装)--jsapi
- (2019-08-31)苹果系统微信自带浏览器不支持form表单p...
- (2020-11-23)nginx环境下thinkphp3.2的配置
- (2013-06-17)新手学PHP和MySQL动态网站开发教程
- (2019-10-23)php接口的token详解
- (2019-08-30)【转载】一个PHP文件搞定微信H5支付
- (2017-09-05)thinkphp3.2实现新版阿里大于短信验证功能
相关栏目
热门文章
最新图文
-
PHP 中字符编码转换 iconv() 和 mb_convert_encoding() 的区别
- Time:2019-01-07
-
- Time:2017-09-05
-
- Time:2013-06-17
评论排行
- (5)条phpcms筛选功能(经典无错)
- (4)条朋友圈转“贩卖儿童判死”
- (4)条微信即将封杀分销平台?传30
- (3)条做优化,十个最让用户反感的
- (2)条phpcms v9字段筛选教程
- (2)条【织梦bug】织梦5.7进入后台
- (2)条phpcms v9通用api开发教程
- (1)条网页制作技巧教程:网页无障
- (1)条贪吃的阿里:阿里2年疯狂并
- (1)条史上最全SEO高级搜索命令大全