php自定义token类并将生成的token放在http请求头的Authorization中的代码
发表时间:2025-11-01 来源:浏览器大全整理相关软件相关文章人气:
网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。因而,超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立在超文本基础之上的。超级文本标记语言之所以称为超文本标记语言,是因为文本中包含了所谓“超级链接”点。
本篇文章给大家带来的内容是关于php自定义token类并将生成的token放在http请求头的Authorization中的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
今天在使用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 xml操作类(自定义)
PHP实现可自定义样式的分页类,php自定义样式分页
php中自定义类文件自动加载
以上就是php自定义token类并将生成的token放在http请求头的Authorization中的代码的详细内容,更多请关注php中文网其它相关文章!
网站建设是一个广义的术语,涵盖了许多不同的技能和学科中所使用的生产和维护的网站。