Как аутентифицировать пользователей iOS / iPhone с помощью удаленного веб-приложения и повторно использовать билет для аутентификации в будущих запросах к тому же веб-приложению? - PullRequest
18 голосов
/ 03 октября 2011

Я создаю приложение для iOS, и мне нужно иметь возможность делать аутентифицированные запросы к приложению Rails 3 для различных битов данных.Приложение Rails 3 использует omniauth и URL-адреса, такие как https://myapp.com/auth/facebook, например, для аутентификации пользователей через facebook ... и после аутентификации сохраняет аутентификацию в защищенном файле cookie с именем "auth". "

Что я хочу знать, так это как аутентифицировать своих пользователей из приложения iOS / iPhone, сохранить маркер аутентификации и отправить его вместе с будущими запросами в приложение Rails?


Использование ASIHTTPRequest IЯ собираюсь сделать что-то вроде этого:

  1. Откройте UIWebview, загружая URL-адрес из моего веб-приложения, определенного для провайдера, которого они хотят аутентифицироватьс (например, myapp.com/auth/facebook для Facebook или myapp.com/auth/yahoo для Yahoo и т. д.).

  2. В случае успеха, как-то разобрать и сохранитькуки-файл аутентификации в приложении iOS без , отображающий людей, которые обычно видят веб-страницу при аутентификации через веб-сайт ... и вместо этого закрывающий UIWebView и перемещающийсявернуться к другому UIVewController в приложении iOS.

  3. Каким-то образом включить маркер постоянной аутентификации с будущими веб-запросами к приложению Rails.

  4. Я такжехотите разрешить пользователям разрешать приложению iOS хранить эту информацию локально, чтобы им не приходилось повторно входить в удаленное приложение, если они тоже выбирают.


Является ли этоподходить подходящим?Есть ли способ лучше?И, конечно же, как на самом деле реализовать вышеизложенное?

Спасибо - wg

Ответы [ 4 ]

2 голосов
/ 14 октября 2011
  1. Как только UIWebview аутентифицировался с помощью службы said , заставьте его загрузить другой URL-адрес (например, через javascript на странице, к которой сказал сервис возвращается после аутентификации).

  2. Захватите этот запрос, используя объект UIWebViewDelegate, который реализует следующий метод протокола:

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    
  3. Отсюда у вас есть объект NSURLRequest. Вы можете извлечь заголовки запроса в NSDictionary, который будет содержать данные cookie аутентификации, токен и т. Д., Используя следующий метод NSURLRequest

    - (NSDictionary *)allHTTPHeaderFields
    
2 голосов
/ 14 октября 2011

Использовать OAuth довольно просто (ну, не просто слово ...), но я создал приложение для iOS и сервер Java, которые используют OAUth в качестве схемы идентификации, и, после полного цикла, наконец, я получил токен, которыйидентифицирует этого пользователя и (как только можно получить доступ с помощью подписанных запросов) может быть безопасно сохранено в телефоне (я использую только стандартные UserDefaults для его хранения).Только ваше приложение (используя секрет) может подписывать запросы.

Я не знаю, служит ли это вам ...

Ах!После идентификации через Интернет браузер перенаправляет специальный URL-адрес (зарегистрированный для моего приложения), и URL-адрес открывает мое приложение, включая токен в его параметрах, поэтому его легко получить после этапа идентификации в handleOpenURL.

1 голос
/ 10 октября 2011

Для моего приложения это то, что я делаю.

Мое приложение использует devise with omniauth для входа в систему и пользовательского ввода. Устройство само по себе может генерировать уникальный токен с флагом token_authenticatable. Таким образом, на мой запрос на вход в систему, если вход успешный, я отвечаю с помощью JSON-представления моего пользователя и моего токена пользователя. Я сохраняю все это в памяти телефона.

Затем при каждом запросе я добавляю параметр auth_token = MY_USER_TOKEN.

И это все.

У меня была только проблема с аутентификацией Facebook, потому что я использую Ios facebook SDK, поэтому я перенаправляю токен FB в свое приложение, проверяю его, а затем просто возвращаю тот же самый devise auth_token для всех следующих запросов.

0 голосов
/ 04 октября 2011

Хорошо, мы идем, я не знаю точную настройку вашего веб-сервиса и все такое, но вы можете сохранить токен аутентификации на устройстве, используя SQLite или Core Data, в настоящее время я работаю над приложением, которое требует аутентификация, и что я делаю, это сохраняю имя пользователя и пароль локально на устройстве в базе данных SQLite, используя Core Data для взаимодействия с базой данных, а затем, когда я делаю вызовы API, я использую сохраненные имя пользователя и пароль для аутентификации на стороне сервера. использование получает, но я полагаю, что использование почты более безопасно, поскольку веб-сервер обладает высокой безопасностью, и я не верю, что существуют какие-либо угрозы безопасности. В том, что я понимаю о том, что вы создаете, я бы аутентифицировал пользователя при первом запуске, и я бы смог изменить учетные данные для входа на более позднем этапе, но после аутентификации я отправил бы маркер аутентификации на устройство и сохранил бы это. в БД, а затем всякий раз, когда мне нужно пройти аутентификацию с помощью веб-службы, я отправляю токен аутентификации с запросом post на сервер. Имеет ли это смысл?

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