用户授权
当用户在 IOS APP 端授权登陆之后,APP 端可以拿到 identityToken
, authorizationCode
, userID
这三个字段的数据。
php-jwt
后端从前端接收到 identityToken
字符串之后,由于 identityToken
是一个 JWT
,因此我们需要安装如下第三方库对 identityToken
进行解析
composer require firebase/php-jwt
JWK
安装完成之后,我们还需要获取解密 JWT
的 JWK
,这个可以通过访问 https://appleid.apple.com/auth/keys 得到
{
"keys": [
{
"kty": "RSA",
"kid": "AIDOPK1",
"use": "sig",
"alg": "RS256",
"n": "lxrwmuYSAsTfn-lUu4goZSXBD9ackM9OJuwUVQHmbZo6GW4Fu_auUdN5zI7Y1dEDfgt7m7QXWbHuMD01HLnD4eRtY-RNwCWdjNfEaY_esUPY3OVMrNDI15Ns13xspWS3q-13kdGv9jHI28P87RvMpjz_JCpQ5IM44oSyRnYtVJO-320SB8E2Bw92pmrenbp67KRUzTEVfGU4-obP5RZ09OxvCr1io4KJvEOjDJuuoClF66AT72WymtoMdwzUmhINjR0XSqK6H0MdWsjw7ysyd_JhmqX5CAaT9Pgi0J8lU_pcl215oANqjy7Ob-VMhug9eGyxAWVfu_1u6QJKePlE-w",
"e": "AQAB"
}
]
}
有了 JWK
之后,借助于第三方网站 https://8gwifi.org/jwkconvertfunctions.jsp,我们就可以很容易地将 JWK
转换为 PEM
保存到本地了
解析
经过了上述的一系列准备,倘若 PEM
文件位于path/to/apple-publickey.pem
,那么使用如下代码即可获取到授权用户的 ID 数据了
$cert_content=file_get_contents("path/to/apple-publickey.pem");
$decode=JWT::decode($identityToken,$cert_content,['RS256']);
print_r($decode);
参考文献
- iOS 13 苹果账号登陆与后台验证相关 https://juejin.im/post/5d551d11e51d4561cf15dfae