이 기사는 PHP에서 토큰 클래스를 사용자 정의하고 생성된 토큰을 http 요청 헤더의 인증에 배치하는 방법에 대한 코드를 제공합니다. 이는 특정 참조 값을 가지고 있으므로 도움이 될 것입니다. .
오늘 laravel을 사용하여 무언가를 작성하다가 프론트엔드와 상호작용해야 하는데 jwt(json web token)를 보고 토큰이 멤버 ID와 정보를 저장하는 간단한 클래스를 작성해보고 싶었습니다. 회원 권한을 부여하고 프런트 엔드와 상호 작용할 때 생성된 토큰을 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는 사용자 정의 가능한 스타일 페이징 클래스, PHP 사용자 정의 스타일 페이징을 구현합니다.
위 내용은 PHP는 토큰 클래스를 사용자 정의하고 생성된 토큰을 http 요청 헤더의 Authorization에 넣습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!