[英]How to validate the user JWT pass over Token is correct
我的意思是不驗證正確格式的令牌。
根據jwt / README.md的3.2·lcobucci / jwt,此驗證正在驗證正確格式的令牌,但是當我設置http://example.org/token/123.123.123
類的值時,該庫將引發異常,像這樣:
如何驗證用戶JWT通過令牌傳遞正確的2個點?
我已經有了一個解決方案,可以分享給所有人:
// $token from a HTTP request.
// Must have 2 dots.
if (substr_count($token, '.') === 2) {
$preValidToken = base64_decode($token);
// Get decoded token's last '}' position.
$lastPos = strrpos($preValidToken, '}');
if ($lastPos) {
// Assemble Json string.
$preValidToken = '[' . substr($preValidToken, 0, $lastPos + 1) . ']';
$preValidToken = str_replace('}{', '},{', $preValidToken);
// Convert to associative array.
$preValidToken = json_decode($preValidToken, true);
if ($preValidToken && is_array($preValidToken)) {
var_dump($preValidToken);
die;
$token = (new Parser())->parse((string) $token);
// Parses from a string
// Do something here...
}
}
}
echo json_encode([
'code' => 205,
'msg' => 'Token not valid '
]);
exit();
如果有效,則$preValidToken
將為array
,內容如下:
array (size=2)
0 =>
array (size=3)
'typ' => string 'JWT' (length=3)
'alg' => string 'HS256' (length=5)
'jti' => string '123123123' (length=9)
1 =>
array (size=6)
'iss' => string 'http://example.org' (length=13)
'jti' => string '123123123' (length=9)
'iat' => int 1524314239
'nbf' => int 1524314299
'exp' => int 1524317839
'uid' => int 1
然后,我們可以通過驗證此數組來驗證令牌是否有效,如果沒有問題,我們可以執行下一個代碼行$token = (new Parser())->parse((string) $token);
沒有錯誤。
不知道有沒有更好的辦法?
無需預先驗證任何內容,因為該庫為您提供了一個例外。 例外的目的是為了處理這種情況而將其捕獲。 因此,您需要的是:
try {
$token_info = (new Parser())->parse((string) $token_string);
// successful
} catch(RuntimeException $e) {
// unsuccessful
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.