• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-21) 15次浏览 已收录 0个评论

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

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

<?phpnamespace 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';      <strong>*本文来@源gao@daima#com搞(%代@#码@网2</strong><pre>搞代gaodaima码

$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&#039; || $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中的代码的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php自定义token类并将生成的token放在http请求头的Authorization中的代码
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址