微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Apple JS 登录:从代码和 id_token 中获取用户 ID?

如何解决Apple JS 登录:从代码和 id_token 中获取用户 ID?

我需要使用 Apple 登录来让用户登录我的网站。所有用户都已经在 iOS 原生应用中使用 Apple 注册进行了注册。作为 iOS 注册过程的一部分,Apple 提供了一个用户 ID,它是该特定用户的唯一标识符。我将其保存在我的数据库中以识别用户

用户在网站上使用 Apple JS 登录时,我如何获得相同的 Apple 用户 ID?

我正在使用 Apple JS,如下所述https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/configuring_your_webpage_for_sign_in_with_apple 我有 usePopup=false

  • 用户点击Apple signin with Apple 按钮,然后通过 Apple 的登录向导。好的
  • Apple 向我指定的重定向 URI 发送 POST 请求。好的
  • 发布请求包含 id_token 和代码。好的

现在,我如何获取 Apple 的用户 ID 以识别登录的实际用户

解决方法

提供的 id_token 包含解码后的 Apple 用户 ID。 它已使用 JWT 进行编码。您不需要任何密钥或秘密来解码它。实际上,您可以将 id_token 复制粘贴到此处 https://jwt.io/ 以查看格式及其包含的所有数据。

Apple 用户 ID 是子信息。

// Header
{
  "kid": "AIDOPK1","alg": "RS256"
}
// Payload
{
  "iss": "https://appleid.apple.com","aud": [Same as clientId,same as serivce id],"exp": 1579073561,"iat": 1579072961,"sub": [Apple User Identifier],"c_hash": "Q4ZkNP4SB2f-m9vtLfO0UA","email": [EMAIL],"email_verified": "true","is_private_email": "true","auth_time": 1579072961
} 

关于安全

出于安全原因,您应该在继续使用 user_id(提供并检查状态,检查解码信息)之前验证一些事项,本教程讨论了 https://sarunw.com/posts/sign-in-with-apple-4/

在 Python 中我安装了 pyjwt (https://pypi.org/project/PyJWT/)

import jwt
decoded = jwt.decode(token,audience="<clientid>",options={"verify_signature": False})
# clientid is what you provided in the call to Apple
user_id = decoded["sub"]

clientid 是您在用户单击登录时在调用中提供的内容。这与您在控制台中为应用设置的服务 ID 相同。 (如果您已经到了拥有 id_token 的地步,那么您就已经设置好了。)我找不到不提供此信息来解码 id-token 的方法,尽管它必须是可能的,因为 {{ 3}} 网站可以做到。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。