欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP接入Apple對(duì)access_token/identityToken進(jìn)行JWT驗(yàn)證流程詳解

 更新時(shí)間:2022年09月26日 16:39:41   作者:至天  
JWT(JSON Web Token)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)放標(biāo)準(zhǔn)。本文將為大家介紹PHP如何實(shí)現(xiàn)JWT登錄鑒權(quán),需要的可以參考一下

需用到 Composer 庫(kù):firebase/php-jwt,直接安裝即可 composer require firebase/php-jwt

解析 JWT 頭

簡(jiǎn)單示例下 UniApp 中通過(guò) 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 得到授權(quán)數(shù)據(jù)
                    // authResult.access_token 與 appleInfo.identityToken 相同;authResult.openid 與 appleInfo.user 相同
                    // TODO: 登錄請(qǐng)求
                },
                fail: function(err) {
                    console.log('三方登錄獲取登錄信息失敗', err)
                    if (err.errCode === 1001) {
                        // 登錄已取消
                    } else {
                        // 其它錯(cuò)誤情況
                    }
                }
            })
        } else {
            // 當(dāng)前環(huán)境不支持該登錄方式
        }
    },
    fail: function(err) {
        console.log('獲取三方登錄信息異常', err)
    }
})

示例 JWT:eyJhbGciOiAiUlMyNTYiLCJraWQiOiAiWXV5WG9ZIn0.

注意實(shí)際得到的 JWT 很長(zhǎng),但在驗(yàn)證時(shí)只需要頭部分,所以我們可以先截取頭部分:

// 截取至第一個(gè)「點(diǎn)」的位置為 JWT 頭
$header = json_decode(base64_decode(substr($token, 0, strpos($token, '.'))), true);

獲取 Apple 公鑰

公鑰可以直接通過(guò)接口獲?。?a rel="external nofollow" target="_blank">https://appleid.apple.com/auth/keys

因?yàn)椴淮嬖谧兓ㄗh首次獲取后解碼 $keys = json_decode($keys, true) 并緩存,下次直接從緩存中拿取

解析$keys(公鑰)

這里就需要使用安裝的 Composer 庫(kù)了:

$parsedKeys = \Firebase\JWT\JWK::parseKeySet($keys, true);

獲取目標(biāo) Key

這里說(shuō)的目標(biāo) Key 也就是 $keys 中用來(lái)解碼 JWT 的 Key,當(dāng)然你也許會(huì)想循環(huán) $keys,這肯定不河里啊!

最開(kāi)始獲取的 $header 中包含了一個(gè) kid,而解析后的 $parsedKeys 中也存在對(duì)應(yīng) kid 值的一個(gè)鍵

所以我們可以直接判斷:

if (!($parsedKeys[$header['kid']] ?? null)) {
    throw new \Exception('JWT decode failed');
}

解碼獲取 OpenID

一定要捕獲異常,decode 方法會(huì)拋出 7 種不同的異常,有個(gè)簡(jiǎn)單且友好的做法是單獨(dú)判斷過(guò)期異常并響應(yīng)友好提示

try {
    $decoded = \Firebase\JWT\JWT::decode($token, $parsedKeys[$header['kid']]);
} catch (\Exception $e) {
    if ($e instanceof \Firebase\JWT\ExpiredException) {
        // 返回友好提示告知用戶授權(quán)過(guò)期
    }
    // 可直接響應(yīng)登錄異?;騾?shù)異常
}
// JWT 中 sub 即為 OpenID
$openId = $decoded->sub;

多說(shuō)兩句

  • Apple 登錄授權(quán)后前端除了拿到 identityToken 還有一個(gè) user 也是 OpenID,但是該 OpenID 不可信,可以在解碼 JWT 后進(jìn)行對(duì)比;
  • JWT 的有效期是 10 分鐘;

到此這篇關(guān)于PHP接入Apple對(duì)access_token/identityToken進(jìn)行JWT驗(yàn)證流程詳解的文章就介紹到這了,更多相關(guān)PHP JWT驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解json在php中的應(yīng)用

    詳解json在php中的應(yīng)用

    在本篇文章中我們給大家分享了關(guān)于json在php中的應(yīng)用的相關(guān)知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。
    2018-09-09
  • PHP函數(shù)實(shí)現(xiàn)分頁(yè)含文本分頁(yè)和數(shù)字分頁(yè)

    PHP函數(shù)實(shí)現(xiàn)分頁(yè)含文本分頁(yè)和數(shù)字分頁(yè)

    分頁(yè)功能是經(jīng)常使用的一個(gè)功能,因此用PHP實(shí)現(xiàn)分頁(yè),文本分頁(yè)和數(shù)字分頁(yè),對(duì)其以函數(shù)形式進(jìn)行了封裝
    2014-10-10
  • php中substr()函數(shù)參數(shù)說(shuō)明及用法實(shí)例

    php中substr()函數(shù)參數(shù)說(shuō)明及用法實(shí)例

    這篇文章主要介紹了php中substr()函數(shù)參數(shù)說(shuō)明及用法,以實(shí)例形式深入分析了substr()函數(shù)中的各個(gè)參數(shù)的含義,并舉例說(shuō)明了其對(duì)應(yīng)的用法,需要的朋友可以參考下
    2014-11-11
  • PHP之十六個(gè)魔術(shù)方法詳細(xì)介紹

    PHP之十六個(gè)魔術(shù)方法詳細(xì)介紹

    PHP中把以兩個(gè)下劃線__開(kāi)頭的方法稱為魔術(shù)方法(Magic methods),這些方法在PHP中充當(dāng)了舉足輕重的作用。這里進(jìn)行詳細(xì)介紹,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • PHP5各個(gè)版本的新功能和新特性總結(jié)

    PHP5各個(gè)版本的新功能和新特性總結(jié)

    因?yàn)?nbsp;PHP 那“集百家之長(zhǎng)”的語(yǔ)法,加上社區(qū)氛圍不好,很多人對(duì)新版本,新特征并無(wú)興趣,本文將會(huì)介紹自 PHP5.2 起,直至 PHP5.6 中增加的新特征
    2014-03-03
  • php中的數(shù)組操作函數(shù)整理

    php中的數(shù)組操作函數(shù)整理

    PHP 中的數(shù)組實(shí)際上是一個(gè)有序圖。圖是一種把 values 映射到 keys 的類(lèi)型。此類(lèi)型在很多方面做了優(yōu)化,因此可以把它當(dāng)成真正的數(shù)組來(lái)使用,或列表(矢量),散列表(是圖的一種實(shí)現(xiàn)),字典,集合,棧,隊(duì)列以及更多可能性。因?yàn)榭梢杂昧硪粋€(gè) PHP 數(shù)組作為值,也可以很容易地模擬樹(shù)。
    2008-08-08
  • PHP5.2中PDO的簡(jiǎn)單使用方法

    PHP5.2中PDO的簡(jiǎn)單使用方法

    這篇文章主要介紹了PHP5.2中PDO的簡(jiǎn)單使用方法,較為詳細(xì)的分析了PHP5.2中PDO的配置與數(shù)據(jù)庫(kù)的連接,查詢等基本操作技巧,需要的朋友可以參考下
    2016-03-03
  • php5中類(lèi)的學(xué)習(xí)

    php5中類(lèi)的學(xué)習(xí)

    類(lèi)的結(jié)構(gòu): 類(lèi)的內(nèi)部能可能有三種東西,就是常量(constant),屬性(property)和方法(method),功能可以理解成類(lèi)外部的常量,變量和函數(shù)。
    2008-03-03
  • mod_php、FastCGI、PHP-FPM等PHP運(yùn)行方式對(duì)比

    mod_php、FastCGI、PHP-FPM等PHP運(yùn)行方式對(duì)比

    這篇文章主要介紹了mod_php、FastCGI、PHP-FPM等PHP運(yùn)行方式對(duì)比,本文講解了什么是PHP處理器(PHP handlers)、mod_php的優(yōu)缺點(diǎn)、FastCGI的優(yōu)缺點(diǎn)、PHP-FPM(FastCGI Process Manager)的優(yōu)缺點(diǎn)等內(nèi)容,需要的朋友可以參考下
    2015-07-07
  • Yii操作數(shù)據(jù)庫(kù)的3種方法

    Yii操作數(shù)據(jù)庫(kù)的3種方法

    這篇文章主要介紹了Yii操作數(shù)據(jù)庫(kù)的3種方法,需要的朋友可以參考下
    2014-03-03

最新評(píng)論