OAuth проблемы безопасности на мобильном телефоне Android? - PullRequest
1 голос
/ 19 апреля 2011

Я пишу клиентское приложение, которое будет работать на телефонах 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.

- Рошлер

1 Ответ

2 голосов
/ 19 апреля 2011

Имею некоторый опыт работы с OAuth-серверами Яндекса. Вот как они это делают ..

OAurh сервер доступен только по HTTPS. Таким образом, токен передается по сети в зашифрованном виде. Поскольку это HTTPS - клиент может проверять действительность серверов с помощью проверки сертификатов.

Кроме того, они рекомендуют хранить полученный токен доступа в зашифрованном виде. Что касается меня, у меня есть собственная реализация хранилища, которая хранит токен доступа в зашифрованном виде 3DES в SharedPreferences. Ключом к шифрованию 3DES является выбранный пользователем «PIN-код». Каждый раз, когда приложение запускается, оно запрашивает PIN-код, а затем пытается расшифровать токен.

Вы можете посмотреть на мою библиотеку , реализующую доступ к одной из служб Яндекса (используя OAuth для предоставления доступа).

...