Невозможно получить утверждения группы пользователей при использовании Azure AD в качестве внешнего входа вместе с Identity Core (ASP.NET Core 2.1) - PullRequest
4 голосов
/ 15 октября 2019

Я пытаюсь сделать следующее:

  • Получить управление пользователями и ролями Azure AD для работы с Identity Core.
  • Цель -> еслипользователь входит в систему через Azure AD (внешний вход в систему), я получаю соответствующие данные пользователя из AD, используя ту же логику записи для синхронизации удостоверений с AD.

Проблема:

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

Однако при использовании AD в качестве схемы внешнего входа в систему с Identity я могу извлечь не более 4 заявок из AD.

Что я пробовал:

appsettings.json

  **{
      "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "Domain": "domain name",
        "TenantId": "aaaaaa-assss-assas--assa-ssss",
        "ClientId": "aaaaaa-ssssss-ddddd-dddddd",
        "CallbackPath": "/signin-oidc",
        "SignedOutCallbackPath": "/signout-callback-oidc",
        "ClientSecret": "clientsecret of the application",
        "CookieSchemeName": "Identity.External"


      },
      "Logging": {
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "AllowedHosts": "*",
"GraphApiUrl": "https://graph.microsoft.com/beta"
    }**

startup.cs

public void ConfigureServices(IServiceCollection services)
        {

            services.AddMicrosoftIdentityPlatformAuthentication(Configuration)
              .AddMsal(Configuration, new string[] { "User.Read", "Directory.Read.All" })
              .AddInMemoryTokenCaches();
            services.AddMSGraphService(Configuration);

            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));

            services.AddDefaultIdentity<IdentityUser>()
                .AddRoles<IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>();            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

Мой результат

Заявки от Azure AD (в качестве единственной схемы аутентификации для приложения)

enter image description here

Роль пользователей в AD через утверждения. (в качестве единственной схемы аутентификации для приложения)

enter image description here

С помощью Azure Ad в качестве внешнего входа я могу получить только 4 заявки (не очень полезные данные)

enter image description here

enter image description here

Ссылка: Проект Github

1 Ответ

1 голос
/ 17 октября 2019

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

Сформировать личность внешнего логина. После Скоффолдинга будет 2 файла

  • ExternalLogin.cshtml
  • ExternalLogin. cshtml.cs

В файле ExternalLogin.cshtml.cs есть метод с именем "OnGetCallbackAsync". В этом методе вы можете либо добавить свои собственные утверждения, либо получить существующие утверждения там

 "var info = await _signInManager.GetExternalLoginInfoAsync();"

под информацией, если вы перейдете к принципалу-> утверждений, вы можете найти утверждения там, где вы можете получить идентификатор группы для текущего пользователя, вошедшего в систему

Чтобы получить утверждения, выполнитеОбязательно добавьте ниже сервис в классе запуска под методом configureServices. За подробным кодом работающей MSAL обращайтесь к проекту github

    services.AddMicrosoftIdentityPlatformAuthentication(Configuration).AddMsal(Configuration, new string[] { "User.Read", "Directory.Read.All" })
services.AddMSGraphService(Configuration);

вместо

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    .AddAzureAD(options => Configuration.Bind("AzureAd", options));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...