Maison > Article > développement back-end > PHP personnalise la classe de jeton et place le jeton généré dans l'en-tête Autorisation de la requête http.
Cet article vous apporte le code sur la personnalisation de la classe de jeton en PHP et le placement du jeton généré dans l'en-tête de la requête http. Il a une certaine valeur de référence. J'espère que cela vous aidera. .
Quand j'utilisais Laravel pour écrire quelque chose aujourd'hui, j'avais besoin d'interagir avec le front-end, j'ai vu jwt (json web token), donc je voulais essayer d'écrire une simple classe de jetons. les identifiants et les autorisations des membres, lors de l'interaction avec le front-end, placez le jeton généré dans l'autorisation de l'en-tête de la requête http, organisé comme suit :
<?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
Recommandations associées :
Classe d'opération XML php (personnalisée)
Chargement automatique des fichiers de classes personnalisés en php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!