JWT在PHP使用及問題處理

來源:互聯網
上載者:User

標籤:定義   ase   composer   end   SHA256   uil   變數   php   解決方案   

官網 https://jwt.io/3.0版本 https://github.com/lcobucci/jwt安裝
composer require lcobucci/jwt
依賴
  • PHP 5.5+ (v3.2) and PHP 7.1 (v4.x)
  • OpenSSL Extension
樣本
<?phpuse \Lcobucci\JWT\Builder;use \Lcobucci\JWT\Signer\Hmac\Sha256;include "../vendor/autoload.php";$builder = new Builder();$signer  = new Sha256();$secret = "XXXXXXXXXXXXXXXXXXXXX";//設定header和payload,以下的欄位都可以自訂$builder->setIssuer("XXX.com") //發行者        ->setAudience("XXX.com") //接收者        ->setId("abc", true) //對當前token設定的標識        ->setIssuedAt(time()) //token建立時間        ->setExpiration(time() + 60) //到期時間        ->setNotBefore(time() + 5) //目前時間在這個時間前,token不能使用        ->set(‘uid‘, 30061); //自訂資料//設定簽名$builder->sign($signer, $secret);//擷取加密後的token,轉為字串$token = (string)$builder->getToken();var_dump($token);
驗證token
<?phpuse \Lcobucci\JWT\Parser;use \Lcobucci\JWT\Signer\Hmac\Sha256;include "../vendor/autoload.php";$signer  = new Sha256();$secret = "XXXXXXXXXXXXXXXXXXXXX";//擷取token$token = isset($_SERVER[‘HTTP_AUTHORIZATION‘]) ? $_SERVER[‘HTTP_AUTHORIZATION‘] : ‘‘;if (!$token) {    invalidToken(‘Invalid token‘);}try {    //解析token    $parse = (new Parser())->parse($token);    //驗證token合法性    if (!$parse->verify($signer, $secret)) {        invalidToken(‘Invalid token‘);    }    //驗證是否已經到期    if ($parse->isExpired()) {        invalidToken(‘Already expired‘);    }    //擷取資料    var_dump($parse->getClaims());} catch (Exception $e) {    //var_dump($e->getMessage());    invalidToken(‘Invalid token‘);}function invalidToken($msg) {    header(‘HTTP/1.1 403 forbidden‘);    exit($msg);}
問題

在開發APP API的過程中發現,服務端無法進行OAuth2.0認證,具體表現為無法擷取Authorization Header頭資訊

解決方案1:

SetEnvIf Authorization “(.*)” HTTP_AUTHORIZATION=$1

這是apache文檔對它的定義,mod_setenvif模組允許根據請求的不同方面匹配指定的Regex來設定環境變數。這些環境變數可由伺服器的其他部分使用。

解決方案2:

Laravel文檔中說如果使用者名稱/密碼沒有進行base64編碼那麼Apache似乎會摒棄Authorization頭,要修複這一問題可以添加如下代碼到Apache設定檔,具體原理同方案1

RewriteEngine OnRewriteCond %{HTTP:Authorization} ^(.*)RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

解決方案3:

將token資訊包含到URL中

http://api.yoursite.com/?token={yourtokenhere}

 

舊舊的 <[email protected]> 解決問題的方式,就是解決它一次

JWT在PHP使用及問題處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.