Я пытаюсь реализовать Вход через Apple с помощью приложения iOS и серверной части. Цель такая:
- Пользователь входит в приложение iOS.
- После положительного ответа приложение вызывает конечную точку на сервере и передает
authorizationCode
- Теперь серверной части необходимо проверить
authorizationCode
другим вызовом сервера Apple.
Вот я запуталась. Чтобы сделать этот вызов, бэкэнд должен предоставить набор параметров:
URL
https://appleid.apple.com/auth/token
Параметры запроса
client_id = com.mycompany.appname
client_secret = ...
code = ... // `authorizationCode` from the signin in the iOS app
grant_type = authorization_code
Я создал JWT
для client_secret
:
Свойства JWT
header:
kid: <key id, created on Apple Dev Portal>
claims:
iss: <team id>
iat: <current timestamp>
exp: <current timestamp + 180 days>
aud: "https://appleid.apple.com"
sub: "com.mycompany.appname"
Вчера я создал два ключа для двух приложений (A и B) на портале разработчиков, использовал их для генерации секретов, и сегодня приложение A работало, и я получил положительный ответ:
Положительный ответ
{
"access_token" : "a1e64327924yt49f5937d643e25a48b81.0.mxwz.GN9TjJIJ5_4dR6WjbZoVNw",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "rca76d9ebta644fde9edba269c61eeb41.0.mxwz.sMDUlXnnLLUOu2z0WlABoQ",
"id_token" : "eyJraWQiOiJBSURPUEsxIcccYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiZGUudHJ1ZmZscy5hcHBsZS1zaWduaW4tdGVzdCIsImV4cCI6MTU2NzcwMDI0MiwiaWF0IjoxNTY3Njk5NjQyLCJzdWaaaiIwMDA3NjkuYWY3NDdjMTlmZGRmNDJhNjhhYmFkZjhlNTQ1MmY3NjAuMjIwNSIsImF0X2hhc2giOiJrVThQTkZOUHYxS0RGUEtMT2hIY213IiwiYXV0aF90aW1lIjoxNTY3Njk5NjM5fQ.g3JD2MDGZ6wiVS9VMHpj24ER0XqJlunatmqpE7sRarMkhMHMTk7j8gty1lpqVBC6Z8L5CZuewdzLuJ5Odrd3_c1cX7gparTQE4jCyvyTACCPKHXReTC2hGRIEnAogcxv6HDWrtZgb3ENhoGhZW778d70DUdd-e4KKiAvzLOse-endHr51PaR1gv-cHPcwnm3NQZ144I-xhpU5TD9VQJ9IgLQvZGZ8fi8SOcu6rrk5ZOr0mpt0NbJNGYgH5-8iuSxo18QBWZDXoEGNsa4kS5GDkq5Cekxt7JsJFc_L1Np94giXhpbYHqhcO1pZSGFrJVaMvMMftZfuS_T3sh2yCqkcA"
}
B, однако, по-прежнему не работает. Сегодня я отозвал ключ для A и создал новый, и теперь он больше не работает с новым, но все еще со старым, хотя я удалил его на портале разработчиков. Я весьма озадачен.
Ошибка ответа:
{
"error": "invalid_client"
}
Интересно, нужно ли Apple какое-то время на индексацию или что-то в этом роде. Я просто хочу понять, как это работает.