Как настроить поток учетных данных клиента для внешних приложений с Azure Active Directory - PullRequest
2 голосов
/ 10 апреля 2019

Мы получили следующую ситуацию:

Внешняя сеть

  • 1 какое-то приложение, которое мы не контролируем

Внутренняя сеть:

  • 1 внутренний API (функция Azure)
  • Active Directory B2C

Я хочу защитить свой внутренний API в соответствии с официальной документацией Microsoft (первая точка) . Но для этого нам понадобится аутентифицировать клиента в активном каталоге.

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

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

Я уже пытался зарегистрировать приложение в колонке активного каталога: Application Registration

На его странице настроек я пытался зарегистрировать разрешения (которые, похоже, являются областями действия в мире AD), но он показывает только официальные API-адреса Microsoft. Setting Permissions for a Application

Как добавить разрешения для внешнего API?

Маркер, созданный с помощью ключа приложения, также не содержит утверждения "scp" или "scope". Как я могу получить заявку на область действия в токене?

Обновление 1

Я зарегистрировал приложение в блейде AD B2C для моего API ( our-api ): Azure AD B2C Application for the Api

Для клиентов, которые я зарегистрировал приложения в блейде AD ( TestClient 1 и TestClient 2 ): Azure AD Applications for the Client

TestClient 1 требуется разрешение для моего приложения "our-api": Required Permissions

TestClient 2 не требует никакого разрешения: Require no permissions

Когда я пытаюсь войти в AD с TestClient 1 , я получаю access_token, как и ожидалось. Но если я попытаюсь войти как TestClient 2 , я получу также access_token. Не должен ли этот процесс провалиться? Как я могу убедиться, что только TestClient 1 имеет разрешение?

1 Ответ

1 голос
/ 11 апреля 2019

Как я могу убедиться, что только TestClient 1 имеет разрешение?

Вы можете проанализировать свои токены в jwt.io , вы можете проверить разрешения токена.

v1 образец токена enter image description here

Когда я пытаюсь войти в AD с помощью TestClient 1, я получаю access_token, как и ожидалось. Но если я пытаюсь войти в систему как TestClient 2, я также получаю access_token.

Во-первых, вы можете использовать любое приложение для получения access_token для любого API, который вы можете найти в разрешении вашего приложения Requried, даже если вы не добавили его в разрешение Required вашего приложения, но вы просто не можете использовать этот access_token для доступа к ресурс API, потому что токен не имеет разрешений. Как вы упомянули, вы создали свой собственный API, поэтому у API нет разрешений для приложений. А в потоке учетных данных клиента это не от имени пользователей, поэтому в этом потоке работают только разрешения для приложений, и оба маркера ваших двух тестовых приложений не будут иметь разрешения.

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