php自訂token類並將產生的token放在http要求標頭的Authorization中的代碼

來源:互聯網
上載者:User

本篇文章給大家帶來的內容是關於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';                 $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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.