解釋一下jwt
jwt就是乙個字串,經過加密處理與校驗處理的字串,由三個部分組成。基於token的身份驗證可以替代傳統的cookie+session身份驗證方法。三個部分分別如下:
header.payload.signature
header部分組成
header 格式為:
這就是乙個json串,兩個欄位都是必須的,alg欄位指定了生成signature的演算法,預設值為 hs256,可以自己指定其他的加密演算法,如rsa.經過base64encode就可以得到 header.
payload 部分組成
playload 基本組成部分:
簡單點:
$payload=[
'iss' => $issuer, //簽發者
'iat' => $_server['request_time'], //什麼時候簽發的
'exp' => $_server['request_time'] + 7200 //過期時間
'uid'=>1111
];複雜點:官方說法,三個部分組成(reserved claims,public claims,private claims)
$token = [
#非必須。issuer 請求實體,可以是發起請求的使用者的資訊,也可是jwt的簽發者。
"iss" => "",
#非必須。issued at。 token建立時間,unix時間戳格式
"iat" => $_server['request_time'],
#非必須。expire 指定token的生命週期。unix時間戳格式
"exp" => $_server['request_time'] + 7200,
#非必須。接收該jwt的一方。
"aud" => "",
#非必須。該jwt所面向的使用者
"sub" => "[email protected]",
# 非必須。not before。如果當前時間在nbf裡的時間之前,則token不被接受;一般都會留一些餘地,比如幾分鐘。
"nbf" => 1357000000,
# 非必須。jwt id。針對當前token的唯一標識
"jti" => '222we',
# 自定義字段
"givenn" => "jonny",
# 自定義字段
"name" => "rocket",
# 自定義字段
"email" => "[email protected]",
];payload 也是乙個json資料,是表明使用者身份的資料,可以自己自定義字段,很靈活。你也可以簡單的使用,比如簡單的方式。經過json_encode和base64_encode就可得到payload
signature組成部分
將 header和 payload使用header中指定的加密演算法加密,當然加密過程還需要自定秘鑰,自己選乙個字串就可以了。
官網例項:
hmacsha256(
base64urlencode(header) + "." +
base64urlencode(payload),
secret)
自己使用:
phppublic static function encode(array $payload, stmevehlfring $key, string $alg = 'sha256')
public static function signature(string $input, string $key, string $alg)
這三個部分使用.連線起來就是高大上的jwt,然後就可以使用了.
jwt使用流程
官方使用流程說明:
程式設計客棧
翻譯一下:
jwt 驗證過程
因為自己寫的,沒有使用框架,所以還是得簡單記錄一下驗證過程
客戶端在請求頭中帶有jwt資訊,後端獲取$_server[http_authorization]:
不過注意一點,我這個authorization沒有加bearer,官方使用中就使用了bearer,你也可以自己使用:
authorization: bearer
php 驗證偽**:
<?php public static function decode(string $jwt, string $key)
public static function urlsafeb64decode(string $input)
return base64_decode(strtr($input, '-_', '+/')); }
public static function urlsafeb64encode(string $input)
jwt 在使用中的注意事項
使用了 jwt 我們一般都會考慮兩點:
1. 簽名是否正確?
2. token是否到期?
這兩塊可以通過校驗幾個欄位來處理
1. 建立 token 吊銷機制,將 token 寫入資料庫,
2. 無效 token 因未入資料庫,所以確信傳入的 token 是有效的。
3. 對有效的 token 進行簽名驗證,獲取到 token 後重新生成簽名進行校驗 token 的簽名部分( c 位的值)是否一致。
4. 確認是否 token 超時可以通過 exp(expire 指定token的生命週期。unix時間戳格式) 和 nbf(not before。如果當前時間在nbf裡的時間之前,則token不被接受。unix時間戳格式。) 宣告,獲取到 token 後,對時間進行判斷。
5. 為了防止replay attack,可加上 iss(issuer 請求實體,可以是發起請求的使用者的資訊,也可是jwt的簽發者。),jti (jwt id。針對當前token的唯一標識) 和 iat(issued at。 token建立時間,unix時間戳格式) 宣告,然後獲取到 token 後,對宣告資訊進行匹配。
參考文章:
總結本文標題: php jwt在web端中的使用方法教程
本文位址:
在web端使用Linq查詢
老版本 引入老版本的js 根據組織id查詢出部門 var selectde jslinq depeart where function item orderby function item select function item 新版本 src script libs linq.min.js sc...
Spring在web中的使用
1.spring 如何在 web 應用中使用 1 需要額外加入的 jar 包 spring web 4.0.0.release.jar spring webmvc 4.0.0.release.jar 2 spring 的配置檔案,沒有什麼不同 3 如何建立 ioc 容器 非 web 應用在 main...
ZedGraph在Web中的使用
sql 實現分組統計查詢 按月 小時分組 中介紹了按月和小時為單位怎樣實現分組查詢,在本文中會實現將上文查詢的結果以圖表的形式顯示在頁面上。在頁面上顯示圖示有很多種解決方案,office 的owc 組建 自己寫 或者是第三方的控制項。本文中將使用 zedgraph 控制項來實現。選擇 zedgrap...