Estoy intentando lo siguiente:

  • Consiga que la administración de roles y usuarios de Azure AD funcione con Identity Core.
  • El objetivo es -> si un usuario inicia sesión a través de Azure AD (inicio de sesión externo), obtengo los detalles de usuario correspondientes de AD, usando la misma lógica de escritura para sincronizar la identidad con AD.

Problema:

Cuando se usa AD como el único esquema de autenticación para la aplicación web sin identidad, se pueden obtener más datos de la solicitud de AD a través de reclamos. (Aproximadamente 14 afirmaciones con las que trabajar)

Sin embargo, cuando utilizo AD como un esquema de inicio de sesión externo con Identity, solo puedo extraer un máximo de 4 reclamaciones de AD.

Lo que he probado:

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);
        }

Mi resultado

Reclamaciones de Azure AD (como el único esquema de autenticación para la aplicación)

enter image description here

Los usuarios asociaron el rol en AD a través de reclamos. (como el único esquema de autenticación para la aplicación)

enter image description here

Con Azure Ad como inicio de sesión externo, puedo obtener solo 4 reclamaciones (datos no muy útiles)

enter image description here

enter image description here

Referencia: Proyecto Github

4
Harshith 15 oct. 2019 a las 18:50

1 respuesta

La mejor respuesta

Tengo la solución probable Espero que ayude

Scaffold la identidad del inicio de sesión externo Una vez que Scaffold habrá 2 archivos

  • ExternalLogin.cshtml
  • ExternalLogin.cshtml.cs

En el archivo External Login.cshtml.cs hay un método llamado "OnGet CallbackAsync". Bajo este método, puede agregar sus propias reclamaciones o hacer que las reclamaciones estén presentes allí.

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

Debajo de información si navega a principal-> reclamos, puede encontrar los reclamos allí donde puede obtener el ID de grupo para el usuario que inició sesión actualmente

Para obtener las reclamaciones, asegúrese de agregar el servicio a continuación en la clase de inicio en el método configureServices Para obtener el código detallado de MSAL en funcionamiento, consulte el proyecto github

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

En lugar de

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    .AddAzureAD(options => Configuration.Bind("AzureAd", options));
1
Harshith 17 oct. 2019 a las 09:40