Можно ли сделать безопасным oauth на iOS?

Можно ли сделать протокол OAuth безопасным в iOS?

Я исследую OAuth 2.0 как средство для реализации единого входа + авторизация для «набора» приложений iOS. Чтобы объяснить свои опасения, я упрощу и использую Facebook + стороннее приложение, которое использует Facebook для аутентификации (скажем, слова / «Слова с друзьями»).

В качестве примера я предполагаю, что Facebook регистрируется для поддержки схемы / протокола «facebook: //» и что Words регистрируется для поддержки «words: //»

Я также предполагаю, что это невозможно защитить «секрет клиента» или протокол в приложении iOS, потому что вы можете декомпилировать приложение. Любые способы, которые я придумал для защиты этого, приводят к безопасности через неизвестность .

Другое предположение состоит в том, что невозможно предотвратить регистрацию двух приложений для обработки одного и того же протокола. Поведение, когда два приложения регистрируются для одного и того же протокола, не определено.(Хотя кажется, что первое приложение, запускаемое на устройстве, регистрируется, а регистрация второго приложения игнорируется)

Если я понимаю рабочий процесс между Facebook (пользовательский агент) и Words (клиент) на устройстве iOS:

  • ] Пользователь запускает Words
  • пользователь выбирает для входа в систему с помощью учетных данных Facebook
  • Words вызывает openUrl ("facebook: //"), который содержит, среди прочего, идентификатор для Words как приложения и uri перенаправления (например, "words: // ")
  • iOS запускает приложение Facebook
  • Пользователь вводит учетные данные, которые приложение Facebook проверяет на сервере авторизации Facebook.
  • Пользователю предлагается авторизовать Word для доступа к данным Facebook (т.е. Words может получить доступ к моему списку друзей)
  • Facebook вызывает uri обратного вызова, предоставленный Words вместе с токеном доступа (например, слова: // access_token? Token_here)
  • Words uses этот токен для доступа к списку моих друзей (т. е. к защищенным данным ресурсов)

Предполагая, что вышеизложенное верно, если я хочу быть злоумышленником и получить доступ к списку друзей случайных людей, я мог бы создать приложение, которое также регистрируется для обработки слов протокола: // "и скачай в магазине приложений. Если у кого-то установлено мое приложение и слова, и мое приложение успешно зарегистрировано (т. Е.запущен на устройстве до слов), затем:

  • Запуск слов, выбор входа в систему, запуск Facebook
  • пользователь аутентифицирует / авторизует
  • Facebook пытается перенаправить обратно в Words, вызывая openUrl на URL-адресе перенаправления
  • My Приложение (не слова) запущено
  • У моего приложения теперь есть доступ к коду авторизации, который (с секретом, полученным путем декомпиляции) можно обменять на access_token с правами доступа к списку ваших друзей

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

В общем, можно ли безопасно реализовать OAuth 2.0 (рабочие процессы авторизации / неявного предоставления) в приложении iOS?

8
задан jayraynet 15 August 2012 в 17:44
поделиться