Я пишу клиентское приложение, которое будет работать на телефонах Android, которое будет взаимодействовать с сервером OAuth от имени пользователя. На моем веб-сервере запущен код на стороне сервера OAuth для поддержки подробностей сеанса OAuth при рукопожатии с удаленным сервером OAuth. Теперь я размышляю над тем, как наилучшим образом справиться со соображениями клиента на смартфоне.
Давайте предположим, что в прошлом я получил токен, предоставленный мне удаленным сервером OAuth после того, как он вошел в систему, и пользователь предоставил права доступа к моему приложению. Предположим также, что это токен доступа «до отмены».
Основная задача, конечно, заключается в реализации того, что не подвергает пользователя риску. Самый простой способ - заставить мой веб-сервер вернуть токен доступа к моему клиентскому коду на смартфоне в зашифрованном виде и просто сохранить этот зашифрованный токен в локальном хранилище пользователя. Или для еще более строгой безопасности верните мой собственный зашифрованный уникальный идентификатор, который код моего клиента на смартфоне передает при каждом запросе. Мой веб-сервер может затем расшифровать полученный идентификатор и найти самый последний токен доступа в локальной базе данных. Это кажется довольно безопасным, за исключением случая потери телефона пользователем. Я думаю, я мог бы реализовать что-то вроде опции «запомнить меня» в браузере, поэтому, если пользователь не проверяет это, то новый сеанс повторной авторизации будет запускаться каждый сеанс.
Если бы мое приложение имело дело с финансовой информацией, я бы даже не выбрал вариант "запомнить меня", но приложение, находящееся за удаленным сервером OAuth, в большей степени находится на уровне чувствительности Twitter или Flickr.
Мои вопросы:
- Достаточно ли безопасна и безопасна моя предложенная схема управления токенами доступа и обработки OAuth для приложения, которое я описываю?
- Есть ли лучшие методы? Если так, то что?
- Есть ли у вас другие мысли или комментарии по поводу OAuth и мобильных телефонов?
** ОБНОВЛЕНИЕ - нашел эту очень полезную ветку в списке связанных вопросов после публикации этого поста:
Секреты OAuth в мобильных приложениях
Могу ли я избежать того, чтобы втиснуть мой потребительский секрет Twitter API в мой двоичный файл приложения iPhone?
** ОБНОВЛЕНИЕ 2 - Если вы переключаетесь из хранилища OAuth сеансов в хранилище базы данных, такое как MySQL, не забудьте зарегистрировать сервер для данного ключа потребителя и идентификатора пользователя, иначе вы получите сообщение об ошибке при вызове requestRequestToken. На этой веб-странице, посвященной API-интерфейсу ELance, есть хороший пример (найдите раздел «Шаг 2: Получить токен запроса» и найдите фрагмент с вызовом updateServer):
http://www.elance.com/p/api/examples/oauth/php
Вам нужно будет адаптировать этот пример для собственных нужд удаленного сервера OAuth.
- Рошлер