Apple登录,授权方法仅在第一次返回名称

Dal*_*bor 5 web apple-sign-in

在 Web 应用程序中实现 Apple 登录(老式 ASP.NET,但这并不重要 - 问题可以视为简单的 HTML/JS POC),在 Apple 端点上调用方法授权:

\n
https://appleid.apple.com/auth/authorize?client_id=...&redirect_uri=...&response_type=code%20id_token&state=...&response_mode=form_post&scope=name%20email\n
Run Code Online (Sandbox Code Playgroud)\n

我想获取用户的名字和姓氏。\n方法返回如下内容:\n{

\n
   "state": "xxx",\n   "code": "yyy",\n   "id_token": "zzz",\n   "user": {\n        "name": {\n            "firstName":"John",\n            "lastName":"Doe"\n        },\n        "email":"example@privaterelay.appleid.com"\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

id_token 是 JWT,由用户的 Apple ID 和电子邮件组成,没有有关姓名的数据。

\n

如您所见,我可以从用户属性中获取姓名。这是我所知道的唯一方法。

\n

问题是,Apple 仅在我第一次请求时才返回此数据。这不是一个错误,而是一个功能:https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/configuring_your_webpage_for_sign_in_with_apple

\n
\n

重要的

\n

Apple 仅在用户第一次授权\n应用程序时返回用户对象。从您的应用程序中保留此信息;后续\n授权请求不会\xe2\x80\x99 包含用户对象。

\n
\n

因此,我存储这些数据以供稍后在工作流程中使用,我会将其存储在数据库中。

\n

现在我的问题/疑问:

\n

当用户删除他们的帐户时,我从数据库中删除他们的所有数据(由于合同、法律等原因,我必须这样做)。

\n

当用户通过 Apple 登录再次注册时,我 ping Apple 端点,并且我不再获取用户数据(包括姓名)(因为上面引用的 Apple 政策)!

\n

我应该做什么才能得到它?

\n

小智 4

我正在做苹果登录后端部分,遇到了类似的问题。

适用于 iOS 13+

  • SDK为第一次授权请求提供苹果用户uuid、电子邮件和名称。
  • 我们正在将这个唯一的 apple_user_uuid 与数据库中的个人资料详细信息进行映射。(如果请求失败,您可以要求后端将其放入队列中,应用程序应将其保留在缓存中,直到后端调用成功)。

适用于 ANDROID/WEB Flow/IOS 13 以下

  • 苹果回调中第一次,它向我们发送带有一次性代码(5 分钟到期)的名称。

  • 当我们调用 token API 时使用此代码,它为我们提供 id_token JWT。

  • 在令牌中,主题是 apple_user_uuid。

  • 将其保留在同一个表中。

因此,现在在后端,您将始终拥有用 apple_user_uuid 标记的电子邮件、名字、姓氏,这对于 Apple id 来说保持不变。

如果用户删除您的帐户,也不要删除此映射。直到苹果提供修复程序。

  • @DavidBrenchley 当您首次使用 Apple ID 登录时,它会在您的 Apple ID 帐户中注册该服务。登录您的 Apple ID 帐户,在安全下 -> 管理应用程序和网站 -> 单击服务并“停止使用 Apple ID”。该用户的下一次授权请求将再次提供姓名和电子邮件。 (4认同)