В Azure аутентификации Active Directory, почему используется поток кода авторизации - PullRequest
1 голос
/ 02 апреля 2020

Я работаю над проектом. net MVC и веб-API и использую активную директорию для аутентификации пользователей в API; при аутентификации код возвращается из AD, и я должен обменять код для получения токена и использовать этот токен для вызова API, вопрос в том, почему возвращается код и почему я должен обменять его на токен? я могу получить токен напрямую?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

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

Я рекомендую вам использовать поток кода авторизации вместо других подходов. У него много преимуществ:

  • Ваше приложение никогда не увидит пароль пользователя
  • Пользователь не может видеть секрет клиента вашего приложения
  • Пользователь не может видеть токены доступа вашего приложения (и злоумышленник не может атаковать «человек посередине»)
  • Вы получаете токен refre sh, который можно использовать для получения новых токенов при необходимости (для этого вам необходимо указать область offline_access) )
  • Пользователь может go через многофакторную аутентификацию, федеративную аутентификацию с ADFS et c., И вашему приложению не нужно заботиться об этом

Альтернатива потоки и их недостатки:

  • Неявный поток
    • Дает вам токен напрямую без обмена кодом
    • Нет refre sh токен
    • В основном используется в одностраничных приложениях, где refre sh выполняется с использованием скрытого iframe, но это зависит от того, остается ли активным сеанс пользователя
    • Если вы используете это вне SPA, вы не сможете на самом деле refre sh токен, требуется вынуждая пользователя регистрироваться снова каждый час
    • Пользователь может видеть и принимать токены доступа вашего приложения
  • Поток учетных данных клиента
    • Вместо того, чтобы обращаться к API как пользователь, вы получаете доступ к нему как к самому приложению
    • Некоторые API не поддерживают этот подход и требуют, чтобы вы совершали звонки от имени пользователя
    • Это не позволяет вам аутентифицировать пользователя
    • Для использования этого потока необходимы разрешения приложения, которые обычно дают очень широкий доступ ко всей организации
    • Преимущество этого потока в том, что он очень прост
  • Поток учетных данных пароля владельца ресурса
    • Не использовать этот поток
    • HTTP-запрос к конечной точке токена с приложением + учетные данные пользователя
    • Выставляет пользователя пароль к вашему приложению (!)
    • Не работает, если у пользователя есть MFA, истек срок действия пароля и т. д. c.
1 голос
/ 02 апреля 2020

Это все из-за соображений безопасности.

OAuth 2.0 хотел соответствовать этим двум критериям:

  • У всех разработчиков не будет сервера с поддержкой SSL, и вы должны разрешить им используйте URI перенаправления не-HTTPS
  • Вы не хотите, чтобы хакеры могли украсть токены доступа / refre sh путем перехвата запросов.

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

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

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

Для получения дополнительной информации посмотрите это фантастическое видео c:

OAuth 2.0 и OpenID Connect (на простом английском языке sh) https://youtu.be/996OiexHze0?t=26m30s (запуск 26 минут)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...