Получите токен-носитель с помощью MSAL.NET для доступа к службе приложений с помощью EasyAuth

У меня есть служба приложений Azure, которая проходит проверку подлинности с помощью Azure AD EasyAuth. Настроен AppService с AD

Настроен AppService с AD 2

Я пытаюсь отправить запрос из другой службы приложений, используя C # и MSAL.NET (Microsoft.Identity.Client).

Код аутентификации выглядит так

var app = ConfidentialClientApplicationBuilder
    .Create(config.ClientId) // The Client ID in the App Registration connected to the App Service
    .WithClientSecret(config.ClientSecret)
    .WithAuthority(new Uri(config.Authority)) // https://login.microsoftonline.com/tenant.onmicrosoft.com/v2.0
    .WithTenantId(config.TenantId) // Tenant Id Guid
    .Build();


// Used Scopes: ["https://graph.microsoft.com/.default"]
var credentials = await app.AcquireTokenForClient(config.Scopes)
    .ExecuteAsync(cancellationToken);

Я успешно получаю токен на предъявителя, но когда я пытаюсь вызвать службу приложений с токеном, введенным в заголовки, я получаю 401 и You do not have permission to view this directory or page. :(

Обновление 1:

Я попробовал ответить @Jim Xu, и он все еще дает мне 401. Он возвращает заголовок www-authenticate со следующим значением www-Authenticate value

Идентификатор ресурса совпадает с ClientId в регистре приложения.

Обновление 2 - Решение

Итак, чтобы резюмировать исправление:

  1. Запрошенные области при вызове AcquireTokenForClient должны включать {Application ID Uri}/.default
  2. В конфигурации EasyAuth Allowed Token Audiences также необходимо установить на Application ID Uri.

person Ayman    schedule 23.02.2021    source источник
comment
К какому api вы звоните?   -  person Carl Zhao    schedule 23.02.2021
comment
Я звоню в службу приложений напрямую. Я аутентифицирую запрос (заголовок авторизации) с помощью токена-носителя, полученного при вызове AcquireTokenForClient   -  person Ayman    schedule 23.02.2021
comment
Ваш scope установлен как ваш api?   -  person Carl Zhao    schedule 23.02.2021
comment
моя область видимости установлена ​​на https://graph.microsoft.com/.default   -  person Ayman    schedule 23.02.2021


Ответы (1)


Если вы хотите вызвать приложение Azure API, которое обеспечивает простую аутентификацию, выполните следующие действия.

  1. Получите Application ID URI приложения AD, которое вы используете, чтобы включить простую аутентификацию

а. В меню Портал Azure выберите Azure Active Directory или найдите и выберите Azure Active Directory на любой странице.

б. Выберите Регистрация приложенийСобственные приложенияПросмотреть все приложения в этом каталоге. Выберите название своего веб-приложения, а затем выберите Обзор. введите описание изображения здесь

  1. код
var app = ConfidentialClientApplicationBuilder
    .Create(config.ClientId) // The Client ID in the App Registration connected to the App Service
    .WithClientSecret(config.ClientSecret)
    .WithAuthority(new Uri(config.Authority)) // https://login.microsoftonline.com/tenant.onmicrosoft.com/v2.0
    .WithTenantId(config.TenantId) // Tenant Id Guid
    .Build();


// Used Scopes: ["{Application ID URI}/.default"]
var credentials = await app.AcquireTokenForClient("{Application ID URI}/.default")
    .ExecuteAsync(cancellationToken);

Дополнительные сведения см. здесь.

person Jim Xu    schedule 24.02.2021
comment
он все еще дает мне 401. Я обновил свой вопрос с результатом. Нужно ли мне добавлять определенную область в регистр приложения? - person Ayman; 24.02.2021
comment
@Ayman Это то, что вы используете одно и то же приложение для проектирования своего веб-API и требуете токен для вызова API. - person Jim Xu; 25.02.2021
comment
извините, не поняла ваш комментарий - person Ayman; 25.02.2021
comment
@Ayman Я хочу, чтобы вы зарегистрировали новое приложение Azure AD, чтобы получить токен AD для вызова вашего веб-API. - person Jim Xu; 25.02.2021
comment
Я создал новый App Registration и подключил его к App Service, но все тот же - person Ayman; 25.02.2021
comment
@Ayman По моему мнению, вы создаете новое приложение Azure AD для настройки простой аутентификации. Между тем, вы также используете приложение для получения токена и вызова веб-API. Верно? - person Jim Xu; 25.02.2021
comment
Верный. Та же регистрация приложения используется для настройки easyauth, а также для получения токена для вызова веб-API. - person Ayman; 25.02.2021
comment
@Ayman Не могли бы вы предоставить скриншот того, как вы настраиваете легкую аутентификацию? - person Jim Xu; 26.02.2021
comment
Обновлены скриншоты - person Ayman; 26.02.2021
comment
@Ayman Обновите проблему как https://sts.windows.net/<tenant id>/ и добавьте URL идентификатора приложения в разрешенные аудитории токенов. - person Jim Xu; 26.02.2021
comment
Да, это сработало ????????????????. Итак, чтобы резюмировать мою проблему, мне нужно было установить scope и Allowed Token Audiences в Uri идентификатора приложения. - person Ayman; 26.02.2021