Запрос учетных данных для доступа к API управления Azure - PullRequest
0 голосов
/ 23 января 2019

Я использую API управления свободным доступом Azure (https://github.com/Azure/azure-libraries-for-net) с некоторым успехом в .NET Core.

Однако я хочу предложить пользователю ввести некоторые учетные данные для учетной записи Microsoft. Эти учетные данные будут иметь доступ к одному или нескольким клиентам / подпискам Azure, поэтому я хотел бы использовать этот результат для просмотра и управления ресурсами там.

Это очень похоже на то, что, как я полагаю, делает Azure Data Studio: вы можете ввести некоторые кредиты Azure, и ваши ресурсы появятся в приложении.

Я пытаюсь понять лучший подход к этому. Кажется, существует миллиард сайтов, когда вы говорите о регистрации приложений Azure AD, но я пока не нашел плодотворного конкретного поискового запроса. Я знаю, что могу зарегистрировать приложение, получить идентификатор клиента и секрет клиента. Я знаю, что могу настроить его для использования учетными записями организации в текущем или всех арендаторах.

Я могу добавить разрешение «Управление службами Azure (делегированные разрешения: user_impersonation)» в мой раздел разрешений API для приложения, но что дальше?

Если я использую Microsoft.Identity.Client (как в https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-netcore-daemon),, я сталкиваюсь с некоторыми вопросами:

  1. AcquireTokenForClientAsync не предлагает пользователю - я полагаю, потому что он получает токен для приложения, чтобы действовать с его собственными разрешениями?
  2. AcquireTokenOnBehalfOfAsync хочет JWT .. отлично! Я передам тот, который получил от AcquireTokenForClientAsync! Нет, AADSTS70002: Error validating credentials. AADSTS500137: The token issuer doesn't match the api version: A version 1 token cannot be used with the v2 endpoint.
  3. Я не знаю, какую область я хочу. https://management.azure.com/user_impersonation явно неверно .. https://management.azure.com/.default работает, но так ли это? Это предположение, комбинация первого и суффикс .default, который я нашел для онлайн-приложений Graph API. Есть какие-нибудь документы по этому поводу?
  4. В конечном итоге мне возвращают JWT и ID арендатора. Я не могу найти способ использовать JWT с API-интерфейсами управления Fluent ... и моя учетная запись (например) связана с 3 арендаторами или 5 различными арендаторами / каталогами - так как мне выбрать?

Это именно то, что я пробовал, подходящий маршрут может быть другим. Итак, я хочу, чтобы приложение .NET Core Console запрашивало учетные данные пользователей, а затем получало доступ к ресурсам Azure, к которым у них есть доступ, для управления некоторыми ресурсами.

1 Ответ

0 голосов
/ 23 января 2019

AcquireTokenForClientAsync не запрашивает пользователя - я полагаю, потому что он получает маркер для приложения для работы с собственными разрешениями?

Вы используете клиент OAuth 2.0учетные данные предоставляют для доступа к веб-ресурсам с использованием идентификатора приложения.Этот тип предоставления обычно используется для взаимодействий между серверами, которые должны выполняться в фоновом режиме, без непосредственного взаимодействия с пользователем.

AADSTS70002: Ошибка при проверке учетных данных.AADSTS500137: издатель токена не соответствует версии API: токен версии 1 нельзя использовать с конечной точкой v2.

Azure AD предоставляет две службы: Azure AD V1.0 и Azure AD V2.0См. Сравнение конечной точки Azure AD v2.0 с конечной точкой v1.0 .Вы не можете использовать токен v1 для получения токена v2 в от имени потока .

AcquireTokenOnBehalfOfAsync хочет JWT .. отлично!Я передам тот, который я получил от AcquireTokenForClientAsync

Как указано выше, эта функция используется для получения токена доступа для этого приложения (обычно веб-API) из полномочий, настроенных в приложении, вЧтобы получить доступ к другому защищенному нижестоящему веб-API от имени пользователя, используя поток OAuth 2.0 On-Behalf-Of.Таким образом, вы не можете использовать токен приложения, который получает с помощью Client Credential flow .

https://management.azure.com/.default работает, но так ли это?Это предположение, сочетание первого и суффикса .default, которое я нашел для онлайн-приложений Graph API.Есть какие-нибудь документы по этому вопросу?

Вы используете Azure Active Directory v2.0 и поток учетных данных клиента OAuth 2.0 при отправке запроса POST в / token v2.0конечная точка, область должна быть:

Значение, передаваемое для параметра области в этом запросе, должно быть идентификатором ресурса (URI идентификатора приложения) требуемого ресурса, прикрепленного к .default.суффикс.Для примера Microsoft Graph это значение равно https://graph.microsoft.com/.default.. Это значение сообщает конечной точке v2.0, что из всех прямых разрешений приложения, которые вы настроили для своего приложения, он должен выдать токен для тех, которые связаны с ресурсом, который вы используете.хотите использовать.

Пожалуйста, ознакомьтесь с разделом Get a token в приведенном выше документе.

В конечном итоге я вернул JWT и ID арендатора.Я не могу найти способ использовать JWT с API-интерфейсами управления Fluent ..

AFAIK, в настоящее время приложения Azure AD V2.0 могут использовать:

  • Свой собственный API
  • API Microsoft Outlook
  • API Microsoft Graph

Azure AD V2.0 в настоящее время не поддерживает API управления Azure.

Итак, проблема в том, что вам нужно разрешить рабочие и школьные учетные записи из Azure AD и личных учетных записей Microsoft (MSA), которые работают с Azure AD V2.0, но вы не можете использовать API-интерфейсы управления Azure.Вы можете использовать API-интерфейсы управления Azure в Azure AD V1.0, но это позволяет только рабочим и школьным учетным записям входить в ваше приложение, если только вы не приглашаете учетные записи Microsoft в качестве гостевого пользователя в Azure AD V1.0, но вам нужно настроить, чтобы они указывали наконечная точка клиента: https://login.microsoftonline.com/{TenantId_or_Name}). во время аутентификации, если вы хотите войти с MSA в приложениях v1.0.


Обновление:

Вы можете использовать Поток кода и конечную точку azure ad v1.0, пользователь будет перенаправлен на страницу входа AAD и введет свои учетные данные. Здесь - это пример кода для .net Core.

В конечной точке Azure AD V1.0 запросы отправляются в конечную точку, которая объединяет всех клиентов Azure AD: https://login.microsoftonline.com/common.Когда Azure AD получает запрос от конечной точки / common, он регистрирует пользователя и, как следствие, обнаруживает, какой арендатор является пользователем.См. Документ здесь .Но в этом сценарии вы можете использовать только учетные записи для работы и учебы (AAD) для входа в систему.

В примере кода в вашей ссылке используется принцип службы Azure для проверки подлинности, без интерактивного входа пользователя. Вы можете использовать OpenID Connect Owin Middleware для аутентификации в приложениях .net Core, как показано здесь .

...