php自定义token类并将生成的token放在http请求头的Authorization中的代码

php自定义token类并将生成的token放在http请求头的Authorization中的代码

内容导读

收集整理的这篇技术教程文章主要介绍了php自定义token类并将生成的token放在http请求头的Authorization中的代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3304字,纯文字阅读大概需要5分钟

内容图文

本篇文章给大家带来的内容是关于php自定义token类并将生成的token放在http请求头的Authorization中的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

今天在使用laravel写东西的时候,需要与前端交互,看了jwt(json web token),于是自己想试着写一个简单的token类,token中存储了成员id和成员的权限,与前端交互时,将生成的token放在http请求头的Authorization中,整理如下:

<?phpnamespace AppHttpControllersAuth;use IlluminateHttpRequest;use AppHttpControllersController;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中的代码的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php自定义token类并将生成的token放在http请求头的Authorization中的代码全部内容,希望文章能够帮你解决php自定义token类并将生成的token放在http请求头的Authorization中的代码所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com