Как создать учетную запись анонимного пользователя, используя Apple-ID пользователей, как Day-One? - PullRequest
0 голосов
/ 12 апреля 2019

Новое приложение iOS должно иметь возможность подключаться к веб-службе для синхронизации данных между устройствами.

Мне нравится, как приложение "Дневник" решило эту проблему:

  • При регистрации пользователь может выбрать использование почтового адреса для настройки «реальной» учетной записи или входа в систему со своим Apple ID
  • При использовании «реальной» учетной записи необходимо подтвердить адрес электронной почты и выбрать имя пользователя и пароль
  • При использовании Apple ID Sign дополнительные действия не требуются. Приложение подключено к веб-сервисам с использованием произвольного идентификатора пользователя
  • При установке на новые устройства нет проблем с повторным подключением с использованием метода Apple-ID.

Проблема 1: Как получить доступ к Apple ID?

Насколько я знаю, приложение не может реально получить доступ к Apple-ID . Или есть какой-то недокументированный способ сделать это? Как это возможно?

Я подозреваю, что приложение вместо этого может использовать iCloud для хранения некоторого токена? Хранилище iCloud связано с Apple-ID, поэтому при установке на новые устройства можно было бы восстановить токен из iCloud и использовать его для повторного подключения.

Или есть другие / лучшие методы?


Проблема 2: Как обработать аутентификацию?

Давайте отложим задачу 1 и предположим, что мы решили проблему создания имени пользователя для нескольких устройств. Как можно обрабатывать аутентификацию?

  • Решение 1: Для аутентификации используется только токен (Apple ID / имя пользователя, сохраненное в iCloud / и т. Д.). Если запрос от приложения к серверу содержит действительное имя пользователя, токен предоставляется.
  • Решение 2: В дополнение к токену имени пользователя при создании анонимной учетной записи генерируется случайный пароль. Это можно сделать на устройстве или на сервере. Но так как пароль должен быть известен с обеих сторон, его необходимо перенести с одного конца на другой в какой-то момент.
    • 2a: Доверьтесь соединению HTTPS и передайте простой пароль
    • 2b: используйте другой метод (например, Деффи Хеллман) для согласования общего пароля

На первый взгляд, 2b кажется наиболее безопасным решением, но так ли это на самом деле? Данные синхронизации не зашифрованы, но «только» доверяют в соединении HTTPS. Добавит ли это дополнительную безопасность для передачи пароля другим способом?

Кроме того, добавляет ли это дополнительную безопасность для использования "пароля" вообще ? Это не пароль, который пользователь выбирает для своего имени пользователя, а автоматически сгенерированный пароль для автоматически сгенерированного имени пользователя / токена.

Не будет ли то же самое просто использовать сгенерированный токен имени пользователя? Только те, кто имеет доступ к токену / учетной записи Apple ID / iCloud и т. Д., Могут получить доступ к веб-службе.


Итак, какое решение является лучшим? Я что-то упустил, и есть лучшие решения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...