GoogleAuthUtil похож на аутентификацию устройства для iOS, чтобы убедиться, что запросы исходят от устройства Apple
Google Auth Util позволяет разработчикам Android проверять, что запросы, поступающие на их серверы, поступают с устройства Android.
Устройство получает токен от Google на основе учетной записи Google, связанной с устройством, затем запросы от устройства отправляются с этим токеном на сервер, где сервер затем спрашивает Google, является ли токен действительным. Любые ключи хранятся вне источника приложения, поэтому злоумышленники не могут взломать приложение и получить доступ к закрытым ключам и фальсифицировать запросы к серверу.
Я некоторое время искал, и кажется, что Apple не предлагает ничего подобного, но я надеялся, что было что-то функционально похожее, что я мог бы использовать для iOS.
1 ответ
Обновить
Хотя неявное предположение в этом вопросе кажется разумным, на самом деле это не так. Дальнейшие чтения источников Google показывают, что целью Auth Util (и более поздней Firebase) является аутентификация пользователя и защита сервера. Учитывая, что сервер видит только сетевой трафик, можно реплицировать трафик с другого клиента.
Кроме того, определение Android довольно размыто, поскольку OEM-производители модифицируют базовую ОС в соответствии со своими потребностями.
Это, вероятно, неправильно
Одним из вариантов является использование Apple Push Notification. Вы можете зарегистрировать устройство и отправлять на него уведомления. Когда ваше приложение загружается, оно отправляет запрос на сервер со своим токеном устройства и получает то, что по сути является файлом cookie сеанса, через APN.
Одно предостережение в том, что он не зашифрован. Вы можете легко решить эту проблему, отправив случайно сгенерированный симметричный ключ в запросе. Полученный файл cookie будет зашифрован на сервере и расшифрован с использованием того же ключа на устройстве iOS.
Это решает проблему хранения ключей в исходном коде и подтверждает, что запросы поступили с устройства iOS.
Конечно, это можно упростить, создав сертификат, сохранив его в цепочке ключей и отправив закрытый ключ на сервер для хранения во время регистрации. После первоначальной регистрации и проверки с использованием APN последующие сообщения могут быть подписаны с помощью идентификатора устройства + открытый ключ сертификата.
Последняя проблема заключается в том, что APN также можно использовать для регистрации устройств OSX. Я не смог понять, как их исключить (пока).
Отказ от ответственности: это был долгий день написания спецификаций. Я достаточно доволен механизмом первоначальной регистрации устройства iOS с использованием APN. Возможно, я неправильно понял части шифрования. Если это так, пожалуйста, оставьте комментарий.