Разница между запросами токенов Apple Sign-In: /auth/token против /auth/keys

Я работаю над приложением Flutter + Django REST Framework и реализую функциональность Apple Sign-In. Когда я пытался вручную получить токен доступа пользователя, я следовал потоку, где нужно было сгенерировать client_secret на бэкенде (это был JWT, построенный с использованием таких значений, как KEY_ID, TEAM_ID, CLIENT_ID и CLIENT_SECRET из учетной записи APPLE DEVELOPER). Затем я отправляю код_авторизации (полученный от flutter), секрет клиента (сгенерированный разработчиком на бэкенде) и другие данные по адресу https://appleid.apple.com/auth/token, чтобы получить токен доступа.

Однако, интегрировав ту же функциональность Apple Sign-In с помощью библиотеки drf-social-oauth2 для Django, я заметил, что мне больше не нужно использовать все эти ключи и секреты (такие как KEY_ID, TEAM_ID, CLIENT_SECRET и т.д.). Вместо этого требуется только CLIENT_ID и identity_token, которые я получаю от приложения Flutter, и он отправляет запрос на https://appleid.apple.com/auth/keys, который возвращает access_token, не требуя authorization_code от Flutter.

Итак, в чем разница между этими подходами? В обоих случаях я получаю токен доступа (хотя у токенов доступа разное время истечения), но единственное, что в одном случае мне не нужны все эти ключи, а в другом - нужны.

Если пользователь завершает процесс Sign in with Apple на своем устройстве, то библиотеки устройства берут на себя все операции, необходимые для генерации подписанного маркера доступа.

Конечная точка https://appleid.apple.com/auth/keys не возвращает токен, она просто возвращает ключи, необходимые для подтверждения того, что токен, предоставленный вашим приложением flutter, был подписан Apple. Как только процесс OAuth получит необходимые ключи и подтвердит токен, вы сможете его использовать.

Однако со временем срок действия маркера доступа истекает. Один из способов получения нового маркера доступа - потребовать от пользователя повторной аутентификации, но это может помешать пользователю. Другой способ - использовать маркер обновления.

Конечная точка authorization_code может быть использована вместе с конечной точкой https://appleid.apple.com/auth/token для получения маркера обновления через запрос authorization_code гранта .

Ваш сервер может безопасно хранить полученный refresh token и использовать его с конечной точкой токена для получения новых токенов доступа и новых токенов обновления, не требуя аутентификации пользователя через refresh_token запрос на предоставление .

Вернуться на верх