В чем разница между двумя рабочими процессами? Когда использовать поток кода авторизации?

OAuth 2.0 имеет несколько рабочих процессов. У меня есть несколько вопросов относительно этих двух.

  • поток кода авторизации. Пользователь регистрируется в клиентском приложении, сервер авторизации возвращает в приложение код авторизации. Затем приложение обменивает код авторизации для токена доступа.
  • Неявный поток грантов. Пользователь регистрируется в клиентском приложении, сервер авторизации напрямую обращается к токену доступа к клиентскому приложению.

В чем разница между двумя подходами в плане безопасности? Какой из них более безопасен и почему?

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

Различные веб-сайты говорят, что поток кода авторизации используется, когда клиентское приложение может хранить учетные данные в безопасности. Почему?

99
01 мая '13 в 18:44
источник поделиться
7 ответов

access_token - это то, что вам нужно вызвать защищенный ресурс (API). В потоке авторизационного кода есть два шага:

  • Пользователь должен аутентифицировать и вернуть code потребителю API (называемому "Клиент" ).
  • "Клиент" API (обычно ваш веб-сервер) обменивает code, полученный в # 1 для access_token, аутентифицируя себя с помощью client_id и client_secret
  • Затем он может вызвать API с помощью access_token.

Итак, существует двойная проверка: пользователь, который владеет ресурсами, просматривал API и клиент, используя API (например, веб-приложение). Оба проверяются для доступа. Обратите внимание на "авторизацию" OAuth здесь: пользователь предоставляет доступ к своему ресурсу (через code, возвращенному после аутентификации) в приложение, приложение получает access_token и вызывает имя пользователя.

В неявном потоке шаг 2 опущен. Поэтому после аутентификации пользователя возвращается access_token, который вы можете использовать для доступа к ресурсу. API не знает, кто вызывает этот API. Любой, у кого есть access_token, может, в то время как в предыдущем примере только веб-приложение (оно внутренне нормально не доступно для всех).

Неявный поток обычно используется в сценариях, где сохранение client id и client secret не рекомендуется (например, устройство, хотя многие это делают). То, что означает отказ от ответственности. Люди имеют доступ к клиентскому коду и поэтому могут получить учетные данные и притворяться, что станут клиентами ресурсов. В неявном потоке все данные являются изменчивыми, и в приложении ничего не хранится.

146
02 мая '13 в 18:30
источник

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


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

Я добавлю что-то здесь, о котором я не думаю, ясно сказано в приведенных выше ответах:

  • Authorization-Code-Flow позволяет конечный токен доступа никогда не появляться и никогда не храниться на компьютере с браузером/приложением. Временный код авторизации предоставляется машине с браузером/приложением, которое затем отправляется на сервер. Затем сервер может обменять его с помощью токена доступа и получить доступ к API и т.д. Пользователь с браузером получает доступ к API только через сервер с токеном.
  • Неявный поток может включать только две стороны, а конечный токен доступа хранится на клиенте с браузером/приложением.. Если этот браузер/приложение скомпрометировано, так это их аутентификационный токен, который может быть опасно.

tl; dr не использовать неявный поток, если вы не доверяете машине пользователей для хранения токенов, но доверяете своим собственным серверам.

27
08 авг. '14 в 13:31
источник

Различие между ними заключается в следующем:

  • В неявном потоке токен возвращается непосредственно через URL-адрес переадресации с знаком "#", и это используется, главным образом, в javascript-клиентах или мобильных приложениях, которые не имеют серверной стороны самостоятельно, и клиенту не нужно обеспечить его секрет в некоторых реализациях.

  • В потоке кода авторизации код возвращается с помощью?? для чтения на стороне сервера, тогда стороне сервера необходимо предоставить секрет клиента на этот раз token url, чтобы получить токен как объект json с сервера авторизации. Он используется, если у вас есть сервер приложений, который может справиться с этим, и хранить токен пользователя с его профилем в своей собственной системе и в основном используется для обычных мобильных приложений.

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

12
02 мая '13 в 12:22
источник

Неявное предоставление похоже на грант кода авторизации с двумя различными отличиями.

Он предназначен для использования клиентами, основанными на пользовательских агентах (например, одностраничные веб-приложения), которые не могут хранить клиентский секрет, поскольку весь код приложения и хранилище легко доступны.

Во-вторых, вместо сервера авторизации, возвращающего код авторизации, который обменивается на токен доступа, сервер авторизации возвращает токен доступа.

Подробнее здесь http://oauth2.thephpleague.com/authorization-server/which-grant/

2
25 апр. '16 в 23:37
источник

Неявный поток

Преимущества

  • Проще всего реализовать

Недостатки

  • Доступ к токенам, видимым для браузера
  • Происхождение токенов доступа не может быть определено
  • Доступ к токенам доступа не может истекать (в соответствии с политикой Google).

Поток кода авторизации

Преимущества

  • Наиболее безопасный
  • Токены доступа и токены обновления могут быть созданы только в том случае, если известен общий секрет
  • Могут быть улучшены новые функции безопасности и UX, когда они станут доступны

Недостатки

  • Необходимо реализовать несколько конечных точек auth

Образец цитирования: https://developers.google.com/actions/develop/identity/oauth2-overview#supported_oauth_20_flows

1
10 февр. '17 в 23:21
источник

С практической точки зрения (что я понял), Основная причина наличия потока кода Authz: ​​

  • Поддержка токенов обновления (долгосрочный доступ приложениями от имени пользователя), не поддерживается в неявном: см. https://tools.ietf.org/html/rfc6749#section-4.2
  • Поддержка страницы согласия, которая является местом, где владелец ресурсов может контролировать, какой доступ предоставить (вид страницы разрешений/авторизации, которую вы видите в google). То же самое не существует в неявном виде. См. Раздел: https://tools.ietf.org/html/rfc6749#section-4.1, point (B)

"Сервер авторизации аутентифицирует владельца ресурса (через пользовательского агента) и устанавливает, предоставляет ли владелец ресурса или отклоняет запрос доступа клиента"

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

0
06 дек. '16 в 10:20
источник

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

Поток кода авторизации!!!

  • Если у вас есть сервер веб-приложений, который действует как клиент OAuth
  • Если вы хотите иметь долговременный доступ
  • Если вы хотите иметь автономный доступ к данным
  • когда вы отвечаете за вызовы api, которые делает ваше приложение
  • Если вы не хотите терять токен OAuth
  • Если вы не хотите, чтобы приложение запускалось через поток авторизации каждый раз, когда ему нужен доступ к данным. ПРИМЕЧАНИЕ. Неявный поток грантов не содержит токен обновления, поэтому, если сервер авторизации регулярно проверяет токены доступа, ваше приложение должно будет проходить через поток авторизации всякий раз, когда ему нужен доступ.

Неявный поток грантов!!!

  • Если у вас нет сервера веб-приложений для работы в качестве клиента OAuth
  • Если вам не нужен долговечный доступ, то требуется только временный доступ к данным.
  • Если вы доверяете браузеру, в котором работает ваше приложение, и существует ограниченная озабоченность по поводу того, что токен доступа будет протекать не доверенным пользователям.
0
13 янв. '17 в 18:38
источник

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