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

时间:2020-08-20 08:10:47

标签: web apple-sign-in

实施Apple在Web应用程序中的登录(老式ASP.NET,但没有关系-问题可以视为简单的HTML / JS POC),在Apple端点上调用方法授权:

https://appleid.apple.com/auth/authorize?client_id=...&redirect_uri=...&response_type=code%20id_token&state=...&response_mode=form_post&scope=name%20email

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

   "state": "xxx",
   "code": "yyy",
   "id_token": "zzz",
   "user": {
        "name": {
            "firstName":"John",
            "lastName":"Doe"
        },
        "email":"example@privaterelay.appleid.com"
    }
}

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

如您所见,我可以从 user 属性获得名称和姓氏。这是我唯一知道的方法。

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

重要

Apple仅在用户首次授权时返回用户对象 该应用程序。在您的应用程序中保留此信息;随后的 授权请求将不包含用户对象。

所以我将这些数据存储在以后的工作流中,然后将其存储在数据库中。

现在我的问题/问题:

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

当用户再次通过Apple登录进行注册时,我对Apple端点执行ping操作,并且不再获得用户数据(包括姓名和姓氏)(由于上述Apple政策)!

我应该怎么做?

1 个答案:

答案 0 :(得分:1)

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

对于IOS 13 +

  • SDK为第一个授权请求提供苹果用户uuid,电子邮件和姓名。
  • 我们正在使用数据库中的配置文件详细信息映射此唯一的apple_user_uuid。 (在请求失败的情况下,您可以要求后端将其放入队列,应用程序应将其保留在缓存中,直到后端调用成功为止。)

对于低于13的ANDROID / WEB流/ IOS

  • 这是Apple回调中的第一个向我们发送带有一个时间码(有效期为5分钟)的名称。

  • 在调用令牌API时使用此代码,它为我们提供了id_token JWT。

  • 总的来说,主题是apple_user_uuid。

  • 将其保留在同一表中。

因此,现在在后端,您将始终具有用apple_user_uuid标记的email,firstName和lastName,对于Apple id保持不变。

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