Нужны ли токены доступа OAuth2 для мобильного приложения?

Принятый здесь ответ на почему токены доступа OAuth2 истекают:

  • Многие провайдеры поддерживают токены-носители, которые очень слабые по безопасности. Делая их недолговечными и требуя обновления, они ограничивают время, когда злоумышленник может злоупотреблять украденным токеном. (Что это значит? Я полагаю, что это означает, что вы разрешаете передачу без TLS? Что-нибудь еще?).
  • Маломасштабное развертывание не хочет выполнять поиск базы данных по каждому вызову API, поэтому вместо этого они выдают самокодированный токен доступа, который может быть проверен путем дешифрования. Однако это также означает, что нет способа отменить эти жетоны, чтобы они были выпущены на короткое время и должны быть обновлены.
  • Для токена обновления требуется аутентификация клиента, которая делает ее более сильной. В отличие от перечисленных токенов доступа, он обычно реализуется при поиске базы данных.

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

Предполагая, что мы отлично справляемся с поиском базы данных против revokable, полностью произвольный токен доступа, заботится обо второй.

Для мобильных приложений аутентификация клиента не может быть более сильной, потому что "client_id и client_secret, полученные во время регистрации, встроены в исходный код вашего приложения. В этом контексте клиент_секретно не рассматривается как секрет". (Google). Это устраняет третью проблему.

Итак, в чем преимущество разделения кратковременных токенов доступа и долгоживущих токенов обновления в этом сценарии? Является ли "нормально" просто выдавать не истекающие токены доступа и игнорировать всю часть токенов обновления?

+21
источник поделиться
3 ответа

Разница между токеном обновления и недействующим токеном доступа в качестве обеспечения - это еще один вызов сервера авторизации.

Если злоумышленник получает доступ к вашему токену без истечения срока действия, он может напрямую вызвать ваш сервер ресурсов и получить конфиденциальные данные в качестве ответа.
Теперь, если он украл ваш токен refresh, он сначала должен вызвать сервер авторизации и получить в ответ токен доступа. Затем он может запросить сервер ресурсов для конфиденциальных данных.

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

Поскольку обычный подход с секретностью клиента не работает, чтобы окончательно определить установленное приложение на открытой платформе, платформа, на которой запущено приложение, должна предоставить методы для этого. Google, например. требует, чтобы приложения для Android подписывались разработчиком. При запросе учетных данных для приложения Android с помощью Консоли API Google вам необходимо указать отпечаток сертификата, который вы использовали для подписывая приложение и получать только идентификатор клиента, но не секретно в ответ. При выдаче жетонов Google затем может решить, разрешено ли разработчику просить токены на свое имя.

Если вы определенно не можете проверить идентификатор клиента, по крайней мере, возможно, в некоторых случаях признать, что токен обновления был украден. Спецификация имеет пример для этого:

Когда аутентификация клиента невозможна, сервер авторизации ДОЛЖЕН развернуть другие средства для обнаружения злоупотребления токеном обновления.

Например, сервер авторизации может использовать поворот токена обновления, в котором новый токен обновления обновляется с каждым ответом обновления токена доступа. Предыдущий токен обновления недействителен, но сохраняется сервером авторизации. Если токен обновления скомпрометирован и впоследствии используется как злоумышленником, так и законным клиентом, один из них представит недействительный токен обновления, который будет информировать сервер авторизации о нарушении.

+29
источник

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

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

+2
источник
другие ответы

Связанные вопросы


Похожие вопросы

Точки доступа OAuth2 не должны истекать (или, скорее, они делают, но это может быть много лет отсюда).

Маркер доступа может использоваться ONCE для получения определенных ресурсов с сервера ресурсов, в частности, он позволяет получить те ресурсы, которые одобрены пользователем. С другой стороны токен обновления позволяет повторный доступ. Таким образом, не удастся обновить токены, не требуя взаимодействия пользователя между каждым доступом.

В общем, хотя токены иногда могут быть украдены другими вредоносными приложениями на одном устройстве или атаками MITM на телефоне. SSL является MITM-совместимым, если телефон можно доверять хитроумному сертификату. Компании иногда требуют доступа к внутренним сетям (они требуют принятия самозаверяющего сертификата, который позволяет им MITM весь зашифрованный трафик, происходящий в сети компании. Таким образом, при отправке зашифрованных средств токенов они не могут быть украдены в пути опасно.

Носильщики-носители не слабее любой другой формы токена как таковой, как доказано в кучке статей (включая одну из моих собственных, на которую я отправлю ссылку, когда я ее выкопаю.) Однако носитель токены подходят только в тех случаях, когда допущения, которые они делают, действительны. Предположение о том, что токен может храниться в секрете, является основным предположением о токенах-носителях в целом. Если это не так, то токены-носители НЕ утверждают никаких свойств безопасности (хотя некоторые из них все еще сохраняются). См. токены уровня 3 NIST, которые определяют, какие маркеры на предъявителя должны победить, как указано в Знаки маркера OAuth. Короче говоря, токены-носители не должны побеждать кражу жетона.

Знаки-носители не могут быть отменены, это правда. Однако, учитывая, что обычной схемой доступа является использование токена доступа сразу после его приобретения, достаточно быстро пропустить токены доступа, чтобы предотвратить потенциальное злоупотребление, даже если в настоящее время не может быть рассмотрено злоупотребление. Чем длиннее токен, тем вероятнее его украсть. Ток обновления - это гораздо более опасный способ украдены, поскольку он обеспечивает повторный доступ в течение более длительного периода времени, если вы не можете защитить идентификатор клиента. OAuth2 может предоставлять доступ к ресурсам в целом и, таким образом, например, может использоваться для временного отображения API-интерфейсов. С помощью токена обновления значительно больше урона может быть сделано, в отличие от одного токена использования.

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

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

В заключение я бы рекомендовал использовать токены обновления и токены базы данных, поскольку это, скорее всего, будет безопасным. Если вы можете сделать что-либо, чтобы защитить клиента от бонуса, но ситуации, в которых он защищен, минимальны. Если вы хотите, чтобы клиент рассматривал мягкие токены, аутентификатор la google, поскольку это прочная реализация, которая выдержала анализ некоторыми очень умными людьми.

-1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос