乐趣区

signinwithapple-苹果登陆后端如何解析用户数据

用户授权

当用户在 IOS APP 端授权登陆之后,APP 端可以拿到 identityToken, authorizationCode, userID 这三个字段的数据。

php-jwt

后端从前端接收到 identityToken 字符串之后,由于 identityToken 是一个 JWT,因此我们需要安装如下第三方库对 identityToken 进行解析

composer require firebase/php-jwt

JWK

安装完成之后,我们还需要获取解密 JWTJWK,这个可以通过访问 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
退出移动版