Вход в Apple, метод авторизации возвращает имя только в первый раз

Реализация входа Apple в веб-приложение (старомодный 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":"[email protected]"
    }
}

id_token - это JWT, который состоит из идентификатора пользователя Apple и электронной почты, нет данных об имени или фамилии.

Как видите, я могу получить имя и фамилию из свойства user. Это единственный известный мне способ.

Проблема в том, что Apple возвращает эти данные только при первом запросе. Это не ошибка, это особенность:

person Dalibor    schedule 20.08.2020    source источник


Ответы (1)


Я выполняю внутреннюю часть входа в систему Apple, столкнулся с аналогичной проблемой.

Для IOS 13+

  • SDK предоставляет идентификатор пользователя Apple, адрес электронной почты и имя для первого запроса авторизации.
  • Мы сопоставляем этот уникальный идентификатор apple_user_uuid с данными профиля в БД. (В случае сбоев запроса вы можете попросить серверную часть поместить это в очередь, и приложение должно хранить это в кеше до тех пор, пока внутренний вызов не будет успешным).

Для ANDROID / WEB Flow / IOS ниже 13

  • Впервые в обратном вызове Apple он отправляет нам имя с одноразовым кодом (истечение 5 минут).

  • Используя этот код, когда мы вызываем токен API, он предоставляет нам id_token JWT.

  • В токене тема - apple_user_uuid.

  • Сохраните это в той же таблице.

Итак, теперь в бэкэнде у вас всегда будет адрес электронной почты, firstName, lastName с тегами apple_user_uuid, которые остаются постоянными для идентификатора Apple.

И не удаляйте это сопоставление, если пользователь удаляет вашу учетную запись. Пока Apple не исправит ошибку.

person Ankit Mishra    schedule 28.08.2020
comment
Да, не совсем ответ, на который я надеялся, но достаточно близко. Мне нужно дать задание команде BE сделать это, и я ожидаю, что они закатят глаза: D - person Dalibor; 31.08.2020
comment
В любом случае, чтобы каждый раз включать получаемое имя и адрес электронной почты для конкретного пользователя для тестирования? Настоящая боль тестировать, когда вам нужно продолжать создавать идентификаторы яблока. - person David Brenchley; 25.10.2020
comment
@DavidBrenchley при первом входе в систему с Apple ID регистрирует службу в вашей учетной записи Apple ID. Войдите в свою учетную запись Apple ID в режиме безопасности - ›управление приложениями и веб-сайтами -› щелкните службу и прекратите использование Apple ID. В следующем запросе авторизации для этого пользователя снова будет указано имя и адрес электронной почты. - person Jarvis Johnson; 11.11.2020