Heim  >  Artikel  >  Backend-Entwicklung  >  PHP passt die Token-Klasse an und fügt das generierte Token in die Autorisierung des HTTP-Anforderungsheaders ein.

PHP passt die Token-Klasse an und fügt das generierte Token in die Autorisierung des HTTP-Anforderungsheaders ein.

不言
不言Original
2018-08-15 16:42:308272Durchsuche

Dieser Artikel enthält den Code zum Anpassen der Token-Klasse in PHP und zum Platzieren des generierten Tokens in der Autorisierung des HTTP-Anforderungsheaders. Ich hoffe, er wird Ihnen helfen .

Als ich heute mit Laravel etwas schrieb, musste ich mit dem Frontend interagieren, also wollte ich versuchen, eine einfache Token-Klasse zu schreiben Mitglieds-IDs und Mitgliederberechtigungen: Fügen Sie bei der Interaktion mit dem Frontend das generierte Token in den Authorization-Header der HTTP-Anfrage ein, der wie folgt organisiert ist:

<?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[&#39;REQUEST_TIME&#39;],           
         "exp"       => $_SERVER[&#39;REQUEST_TIME&#39;] + 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 = &#39;secret&#39;)
    {
        return hash_hmac(&#39;sha256&#39;, $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 . &#39;.&#39; .$payload . &#39;.&#39; . $signature;
    }    /**
     * check a token
     * @param $jwt
     * @param string $key
     * @return array|string
     */
    public static function checkToken($jwt, $key = &#39;secret&#39;)
    {
        $token = explode(&#39;.&#39;, $jwt);        
        if (count($token) != 3)           
         return &#39;token invalid&#39;;        
         list($header64, $payload64, $sign) = $token;        
         if (self::signature($header64 , $payload64) !== $sign)            
         return &#39;token invalid&#39;;        
         $header = json_decode(base64_decode($header64), JSON_OBJECT_AS_ARRAY);        
         $payload = json_decode(base64_decode($payload64), JSON_OBJECT_AS_ARRAY);        
         if ($header[&#39;type&#39;] != &#39;token&#39; || $header[&#39;alg&#39;] != &#39;HS256&#39;)            
         return &#39;token invalid&#39;;        
         if ($payload[&#39;iss&#39;] != &#39;http://api.creatshare.com&#39; || $payload[&#39;GivenName&#39;] != &#39;CreatShare&#39;)            
         return &#39;token invalid&#39;;        
         if (isset($payload[&#39;exp&#39;]) && $payload[&#39;exp&#39;] < time())            
         return &#39;timeout&#39;;        
         return [           
          &#39;memberId&#39; => $payload[&#39;memberId&#39;],            
         &#39;permission&#39; =>$payload[&#39;permission&#39;]
        ];
    }    /**
     * get a token
     * @return null
     */
    public static function getToken()
    {
        $token = null;        
        if (isset($_SERVER[&#39;HTTP_AUTHORIZATION&#39;]))            
        $token = $_SERVER[&#39;HTTP_AUTHORIZATION&#39;];        
        return $token;
    }
}
$token = Token::createToken($member_id, $member_permission); //创建一个
token$token = Token::getToken();    //从http请求头获取
token$result = Token::checkToken(); //解析token

Verwandte Empfehlungen:

PHP-XML-Operationsklasse (angepasst)

PHP implementiert anpassbare Stil-Paging-Klasse, PHP benutzerdefinierten Stil-Paging

Benutzerdefinierte Klasse in PHP-Dateien werden automatisch geladen

Das obige ist der detaillierte Inhalt vonPHP passt die Token-Klasse an und fügt das generierte Token in die Autorisierung des HTTP-Anforderungsheaders ein.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn