Роль Azure AD не отображается в токене аутентификации или идентификатора для гостевого пользователя

Я чувствую, что этот вопрос задавали несколько раз раньше, но я не понимаю и не узнаю, что мне нужно знать.

У меня есть Azure AD с двумя арендаторами. В арендаторе 1 есть все наши пользователи. Клиент 2 предназначен для внешних пользователей, выполняющих входящие вызовы API — сейчас мы находимся на стадии проверки концепции.

Все отлично работает, когда я настраиваю новых пользователей в арендаторе 2. Создаются пользователи, создается приложение, определяются области API и, наконец, с помощью корпоративного приложения создаются роли с локальными пользователями, назначенными ролям. Приложение .Net Core украшено [Authenticate Roles("Read, Write"] и т. д. Затем области проверяются с помощью HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi); внутри каждого метода контроллера. Как я уже сказал, все это прекрасно работает с пользователями которые были определены как локальные пользователи в арендаторе 2.

Если это поможет, мы используем Postman для тестирования.

Однако если я изменю вызов входа в систему, чтобы просто использовать гостевого пользователя, который является существующим пользователем в клиенте Azure AD 1, я наблюдаю следующее поведение. Пользователь проходит аутентификацию, и возвращается user_token, а также id_token. Вызов существующих методов API PUT и POST всегда возвращает ошибку 403 Forbidden. Я читал, что идентификатор гостя должен использовать auth_token, так что я сделал это, но безрезультатно.

Если у кого-нибудь есть какие-либо советы о том, где я должен искать, если я пропускаю что-то простое или если есть значение конфигурации, которое я не делаю, я бы хотел его услышать. Я понимаю, что у меня мало реальных фрагментов кода, но на самом деле их нет. API работает просто отлично, а вызов Postman отлично работает для локальных пользователей. Это просто гостевые пользователи, которым не назначена «правильная» роль.

РЕДАКТИРОВАТЬ - соответствующие биты файла appsettings.json:

"AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx",
    "Domain": "tenant01.onmicrosoft.com", // the domain for tenant 1
    "TenantId": "common"
  },

И файл startup.cs:

public void ConfigureServices(IServiceCollection services)
{
   services.AddMicrosoftIdentityWebApiAuthentication(Configuration);
   services.AddControllers();

   // some other code...
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
       endpoints.MapControllers();
    });
}

Маркер аутентификации для гостевого пользователя показывает область действия, но роль отсутствует. Маркер идентификатора для гостевого пользователя просто показывает стандартные утверждения пользователя — имя, предпочитаемое_имя_пользователя, выдавший арендатор и т. д.

Мне не хватает чего-то, что, вероятно, не очень сложно настроить, но я понятия не имею, что делать дальше.

Какой API вы вызываете?

Carl Zhao 14.12.2020 06:47

Я вызываю пользовательский API-вызов pocDemoApiAd, показанный на снимке экрана выше. Это простой REST API с методами GET, POST, PUT и DELETE.

phigits 14.12.2020 14:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
610
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы поняли это. Никаких изменений в код или файл json внесено не было. URL-адрес, используемый для вызова аутентификации, был изменен. URL-адрес, который был изменен с:

https://login.microsoftonline.com/oauth2/v2.0/токен
НА этот URL
https://login.microsoftonline.com/<tenantid>/oauth2/v2.0/token

Это изменение привело к тому, что роль появилась в id_token. Я читал, что необходимо использовать id_token, но я не знал об изменении, которое необходимо было внести в URL-адрес, чтобы включить идентификатор арендатора.

Другие вопросы по теме