您好,登錄后才能下訂單哦!
這篇文章主要講解了“PHP怎么接入Apple對access_token/identityToken進行JWT驗證”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PHP怎么接入Apple對access_token/identityToken進行JWT驗證”吧!
需用到 Composer 庫:firebase/php-jwt
,直接安裝即可 composer require firebase/php-jwt
簡單示例下 UniApp 中通過 uni.login()
方法獲取 JWT
let type = 'apple' uni.getProvider({ service: 'oauth', success: function(res) { if (res.provider.includes(type)) { uni.login({ provider: type, success: function(authed) { console.log('三方登錄獲取用戶信息成功', authed) // Apple 登錄這兒可用 authed.authResult 或 authed.appleInfo 得到授權數據 // authResult.access_token 與 appleInfo.identityToken 相同;authResult.openid 與 appleInfo.user 相同 // TODO: 登錄請求 }, fail: function(err) { console.log('三方登錄獲取登錄信息失敗', err) if (err.errCode === 1001) { // 登錄已取消 } else { // 其它錯誤情況 } } }) } else { // 當前環境不支持該登錄方式 } }, fail: function(err) { console.log('獲取三方登錄信息異常', err) } })
示例 JWT:eyJhbGciOiAiUlMyNTYiLCJraWQiOiAiWXV5WG9ZIn0.
注意實際得到的 JWT 很長,但在驗證時只需要頭部分,所以我們可以先截取頭部分:
// 截取至第一個「點」的位置為 JWT 頭 $header = json_decode(base64_decode(substr($token, 0, strpos($token, '.'))), true);
公鑰可以直接通過接口獲取:https://appleid.apple.com/auth/keys
因為不存在變化,建議首次獲取后解碼 $keys = json_decode($keys, true)
并緩存,下次直接從緩存中拿取
這里就需要使用安裝的 Composer 庫了:
$parsedKeys = \Firebase\JWT\JWK::parseKeySet($keys, true);
這里說的目標 Key 也就是 $keys
中用來解碼 JWT 的 Key,當然你也許會想循環 $keys
,這肯定不河里啊!
最開始獲取的 $header
中包含了一個 kid
,而解析后的 $parsedKeys
中也存在對應 kid
值的一個鍵
所以我們可以直接判斷:
if (!($parsedKeys[$header['kid']] ?? null)) { throw new \Exception('JWT decode failed'); }
一定要捕獲異常,decode
方法會拋出 7 種不同的異常,有個簡單且友好的做法是單獨判斷過期異常并響應友好提示
try { $decoded = \Firebase\JWT\JWT::decode($token, $parsedKeys[$header['kid']]); } catch (\Exception $e) { if ($e instanceof \Firebase\JWT\ExpiredException) { // 返回友好提示告知用戶授權過期 } // 可直接響應登錄異常或參數異常 } // JWT 中 sub 即為 OpenID $openId = $decoded->sub;
Apple 登錄授權后前端除了拿到 identityToken
還有一個 user
也是 OpenID
,但是該 OpenID
不可信,可以在解碼 JWT 后進行對比;
JWT 的有效期是 10 分鐘。
感謝各位的閱讀,以上就是“PHP怎么接入Apple對access_token/identityToken進行JWT驗證”的內容了,經過本文的學習后,相信大家對PHP怎么接入Apple對access_token/identityToken進行JWT驗證這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。