Секреты OAuth в мобильных приложениях - PullRequest
129 голосов
/ 20 декабря 2009

При использовании протокола OAuth вам нужна секретная строка, полученная от службы, которой вы хотите делегировать. Если вы делаете это в веб-приложении, вы можете просто сохранить секрет в своей базе данных или в файловой системе, но как лучше всего справиться с ним в мобильном приложении (или в этом случае в настольном приложении)?

Хранение строки в приложении явно нехорошо, так как кто-то может легко ее найти и злоупотребить.

Другим подходом было бы сохранить его на вашем сервере, и приложение должно извлекать его при каждом запуске, никогда не сохраняя его на телефоне. Это почти так же плохо, потому что вы должны включить URL в приложение.

Единственное работоспособное решение, которое я могу придумать, - это сначала получить токен доступа в обычном режиме (предпочтительно с использованием веб-представления внутри приложения), а затем направить всю дальнейшую связь через наш сервер, который добавит секрет в запрос данные и общаться с провайдером. С другой стороны, я новичок в области безопасности, поэтому мне бы очень хотелось услышать мнение некоторых знающих людей по этому поводу. Мне не кажется, что большинство приложений идут на все, чтобы гарантировать безопасность (например, Facebook Connect предполагает, что вы поместили секрет в строку прямо в своем приложении).

Другое дело: я не верю, что секрет заключается в первоначальном запросе токена доступа, так что это можно сделать без участия нашего собственного сервера. Я прав?

Ответы [ 14 ]

0 голосов
/ 16 сентября 2010

Я согласен с Феликсом. Хотя OAuth лучше, чем Basic Auth, ему еще предстоит пройти долгий путь, чтобы стать хорошим решением для мобильных приложений. Я играл с использованием OAuth для аутентификации приложения для мобильного телефона в приложении Google App Engine. Тот факт, что вы не можете надежно управлять секретом пользователя на мобильном устройстве, означает, что по умолчанию используется анонимный доступ.

На шаге авторизации браузера реализации Google App Engine OAuth вы переходите на страницу, на которой содержится такой текст: «Сайт запрашивает доступ к вашей учетной записи Google для продуктов, перечисленных ниже»

YourApp (yourapp.appspot.com) - не связан с Google

и т.д.

Он берет из имени домена / хоста, используемого в URL-адресе обратного вызова, который вы можете указать на Android, если вы используете пользовательскую схему для перехвата обратного вызова. Поэтому, если вы используете «анонимный» доступ или ваш секрет потребителя скомпрометирован, тогда любой может написать потребителю, который обманет пользователя, предоставив доступ к вашему gae-приложению.

Страница авторизации Google OAuth также содержит много предупреждений, которые имеют 3 уровня серьезности, в зависимости от того, используете ли вы «анонимный», секретный ключ пользователя или открытые ключи.

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

В этом сообщении в блоге разъясняется, как секреты пользователя не работают с установленными приложениями. http://hueniverse.com/2009/02/should-twitter-discontinue-their-basic-auth-api/

0 голосов
/ 29 апреля 2010

Facebook не использует OAuth, если говорить строго (пока), но они реализовали способ, позволяющий вам не встраивать свой секрет в приложение для iPhone: https://web.archive.org/web/20091223092924/http://wiki.developers.facebook.com/index.php/Session_Proxy

Что касается OAuth, да, чем больше я думаю об этом, мы немного напичканы. Возможно это исправит это.

0 голосов
/ 20 декабря 2009

У меня нет большого опыта работы с OAuth - но не каждый ли запрос требует не только токен доступа пользователя, но также ключ и секретный ключ приложения? Поэтому, даже если кто-то украдет мобильное устройство и попытается извлечь из него данные, ему также понадобится ключ и секретный ключ приложения, чтобы иметь возможность что-либо делать.

Я всегда думал, что намерение, стоящее за OAuth, заключается в том, чтобы каждый Том, Дик и Гарри, у которых было мэшап, не должны были хранить ваши учетные данные Twitter в открытом виде. Я думаю, что это решает эту проблему довольно хорошо, несмотря на ее ограничения. Кроме того, он не был разработан специально для iPhone.

0 голосов
/ 20 декабря 2009

Как уже упоминали другие, не должно быть реальной проблемы с хранением секрета локально на устройстве.

Кроме того, вы всегда можете положиться на модель безопасности Android на основе UNIX: только ваше приложение может получить доступ к тому, что вы пишете в файловую систему. Просто запишите информацию в объект SharedPreferences вашего приложения по умолчанию.

Чтобы получить секрет, необходимо получить root-доступ к телефону Android.

...