Apple 登录:Apple 是不是会永久返回“用户”凭据?

Posted

技术标签:

【中文标题】Apple 登录:Apple 是不是会永久返回“用户”凭据?【英文标题】:Apple Sign In: Is 'user' credential returned by Apple permanent?Apple 登录:Apple 是否会永久返回“用户”凭据? 【发布时间】:2020-02-17 23:24:09 【问题描述】:

我能够成功访问 Apple 返回的凭据,作为其新的 (WWDC '19 -- ios 13) Sign In With Apple library 的一部分。

在此委托方法中访问凭据:

extension ViewController: ASAuthorizationControllerDelegate 
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) 
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential 
         //here is credentials . 
        
    

然后使用 'user' 属性来提取用户 ID:

    credential.user 
    //returns, for example, '000046.20082df1df9a41b78cd1552979288e19.2346' dummy value

对于那个特定的 AppleID(也许还有那个特定的应用程序),这个“用户”属性是否理解为静态/永久的?

(我正在访问一个同步 API,并希望从该 44 个字符的 Apple“用户”凭据中硬编码用户凭据。)

【问题讨论】:

我疯了,还是苹果文档中没有回答这个基本问题? @JonahKatz 你没有疯,我认为我们永远不会得到我们需要的答案。根据我的测试,同一 AppleID 的同一开发者帐户下的用户属性正在发生变化。 【参考方案1】:

ASAuthorizationAppleIDCredential 的用户标识符属性是 Apple ID 和开发团队之间的稳定唯一标识符。应用程序撤销不会影响用户 ID 的稳定性。这也意味着,在开发人员团队的一组应用程序中,用户 ID 将是相同的,因此最适合开发人员的应用程序之间的同步。


编辑应用转移:

将应用程序从一个开发团队转移到另一个开发团队确实会导致用户标识符发生变化,因为它的范围是每个团队的稳定用户标识符。

传输使用 Sign in with Apple 的应用时,最佳做法是使用 Apple API 端点将旧团队的用户 ID 与新团队的用户 ID 映射。如果由于某种原因开发人员不使用 API 端点,AuthenticationServices 通过接受 ASAuthorizationAppleIDRequest 中的旧用户 ID 来支持应用程序传输,并且将返回新用户 ID。

一般来说,AuthenticationServices 会做正确的事。但是,如果用户删除了与团队 A 关联的应用程序(并为该应用程序使用了通过 Apple 登录),然后重新安装现在与团队 B 关联的相同应用程序,则关联两个用户 ID 的唯一方法是使用 API端点。


资料来源:我是负责 Sign in With Apple 团队的一名工程师。

【讨论】:

我仍然无法弄清楚ASPasswordCredential 的作用。它从哪里获取用户名和密码? 但是基于什么键?我一开始就找不到任何如何存储数据的示例。 @Gargoyle 你可以在developer.apple.com/documentation/security/…找到更多信息 @Gargoyle 正确,您也可以直接从您的应用程序中保存密码凭证。因此,建议是在您的应用程序中使用共享凭证 API 保存用户的凭证。但它也会与 Safari 保存的凭据相关联。 ASAuthorizationAppleIDCredential.h 对user 有一条评论说:“只要用户与请求客户端连接,标识符就会保持稳定。用户与身份提供者断开连接后,该值可能会发生变化。 "不得不说已连接听起来不太稳定。

以上是关于Apple 登录:Apple 是不是会永久返回“用户”凭据?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apple 登录刷新令牌验证仅返回访问令牌

_signInManager.GetExternalLoginInfoAsync() 为 Apple 登录返回 null

多租户的 Firebase 身份验证和 Apple 登录

使用 Apple JS 登录返回“invalid_request: Invalid redirect_uri”。

Apple 检查返回值而不是错误的模式背后的基本原理是啥?

iTunes Connect 登录错误 - Apple ID 无权访问 iTunes Connect