Мобильное приложение и интеграция OAuth

В настоящее время мы работаем над дизайном для OAuth в нашей экосистеме. Идея, конечно, в том, что мобильное приложение будет аутентифицироваться на сервере OAuth, используя тип предоставления учетных данных пользователя, чтобы получить токен для дальнейшего рабочего процесса. С другой стороны, сервер защищенных ресурсов проверит информацию о токене на том же сервере OAuth и ответит соответствующим образом.

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

Спасибо,


person Shurik Agulyansky    schedule 06.11.2015    source источник


Ответы (1)


Из RFC 6749, 4.3.2. Запрос токена доступа:

The authorization server MUST:

   o  require client authentication for confidential clients or for any
      client that was issued client credentials (or with other
      authentication requirements),

Итак, если тип клиента (RFC 6749, 2.1. Типы клиентов) вашего клиентское приложение является общедоступным (и вашему клиенту не был выдан секрет клиента), вам не нужно включать свой секрет клиента в запрос токена. Другими словами, вы можете получить токен доступа, не предоставляя клиентский секрет серверу авторизации. В этом случае вы можете избежать встраивания вашего секрета клиента в ваше клиентское приложение.

С другой стороны, если тип клиента вашего клиентского приложения конфиденциальный, клиентское приложение не должно быть доставлено на смартфоны.

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

Обратите внимание, однако, что некоторые реализации сервера авторизации могут всегда требовать секрет клиента, независимо от того, является ли тип клиента общедоступным или конфиденциальным.

person Takahiko Kawasaki    schedule 13.11.2015