Я разрабатываю собственное приложение для iOS, которое использует некоторые веб-службы, предоставляемые моим внутренним сервером. Некоторым службам требуется аутентификация пользователя, и требования состоят в том, чтобы аутентификация выполнялась либо с помощью учетной записи пользователя, созданной непосредственно на сервере, либо с помощью Facebook, либо с помощью Twitter.
Чтобы упростить ситуацию, создатели внутреннего сервера решили, что сервер будет выполнять аутентификацию на стороне сервера с помощью FB или Twitter (или, конечно, использовать свой собственный механизм аутентификации, если пользователь решит войти в систему напрямую с учетной записью на server) и вернуть мне собственный токен доступа сервера после успешной аутентификации, независимо от того, за каким потоком (FB / Twitter / own) он следовал.
Итак, текущий процесс аутентификации выглядит так:
- Я открываю веб-представление из собственного приложения iOS с URL-адресом страницы входа. На странице есть кнопки «Войти через FB» и «Войти через Twitter», а также небольшую форму пользователя / пароля для прямой аутентификации.
- Если пользователь выбирает «Войти с помощью FB», сервер перенаправляет веб-представление на страницу аутентификации приложения FB, где пользователь должен ввести свои учетные данные FB. То же самое и с Twitter.
- URL-адрес перенаправления FB / Twitter устанавливается непосредственно на сервер, поэтому после успешной аутентификации пользователя FB / Twitter отправляет на сервер токен доступа. Сервер создает новый сеанс пользователя, генерирует собственный токен доступа и отправляет его на URL-адрес перенаправления собственного приложения.
- Если пользователь вводит учетные данные прямого сервера в форме, сервер Simple создает сеанс пользователя, свой токен аутентификации и отправляет его на URL-адрес перенаправления.
- Собственное приложение наблюдает за веб-представлением через своего делегата и постоянно ищет предопределенный URL-адрес перенаправления (что-то вроде
http://myserver.com/authentication_success/?authToken=xyz
). Если запрос, переданный вshouldStartLoadWithRequest
, соответствует этому шаблону, оно извлекает authToken и закрывает веб-представление. - Токен аутентификации будет передаваться каждому сервисному запросу, требующему аутентификации пользователя.
У меня вопрос: действительна ли эта архитектура и будет ли она принята Apple? Меня беспокоит то, что, поскольку в определенный момент пользователя могут попросить ввести свои учетные данные Facebook в моем веб-представлении, теоретически я мог бы получить доступ к его паролю FB через делегата. Может быть, это повод отклонить заявку?
Я нашел этот документ: https://developers.facebook.com/docs/facebook-login/login-flow-for-web-no-jssdk/, в котором говорится о том, что вы, возможно, захотите использовать логин на основе браузера для "потока входа с использованием полностью серверной части". код". Можно ли применить мой случай к этому делу?