Registre esquemas de autenticación basados ​​en inquilinos en asp.net core 3.1

12

Actualmente, he creado una aplicación web Identity server 4 con proveedores de inicio de sesión externos con identificación de cliente y secretos predeterminados. Pero mi objetivo es registrar los proveedores de autenticación como Azure, Google, Facebook en función del inquilino.

He utilizado el ensamblaje multiusuario SaasKit , aquí he probado el middleware app.usepertenant () . Pero el método UseGoogleAuthentication () está obsoleto, por lo que no pude lograr la autenticación de múltiples inquilinos utilizando este middleware usepertenant.

Código actual,

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
   .AddMicrosoftAccount(option =>
     {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
     });

El código esperado es el siguiente,

var authentication = services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);

if (tenant.hasMicrosoft)
{
   authentication.AddMicrosoftAccount(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

if (tenant.hasGoogle)
{
   authentication.AddGoogle(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

authentication.AddCookie( options =>
 {
    options.SlidingExpiration = true;
    options.ExpireTimeSpan = new TimeSpan(7, 0, 0, 0);
 });

Madhan kumar D
fuente
Quizás pueda encontrar una respuesta o una solución en este hilo .
Ruard van Elburg
@RuardvanElburg gracias por su respuesta, desde su hilo sugerido podemos actualizar las opciones de esquemas ya registradas en función del inquilino mientras se inicia la aplicación. Después no podemos actualizarlos.
Madhan kumar D
¿Desea tener diferentes configuraciones de ClientId / ClientSecret por inquilino? ¿O solo desea agregar diferentes esquemas basados ​​en el inquilino?
Kirk Larkin
@KirkLarkin diferentes esquemas con el respectivo clientId / secret del inquilino. Como a continuación, if (tenant.hasMicrosoft) {autenticación.AddMicrosoftAccount (option => {option.ClientId = "clientid"; option.ClientSecret = "clientsecret"; option.SaveTokens = true;}); }
Madhan kumar D
¿Algún avance en esto?
Madhan kumar D

Respuestas:

3

Consulte los documentos oficiales de MS, proveedores de autenticación por inquilino

El framework ASP.NET Core no tiene una solución integrada para la autenticación multiinquilino. Si bien es posible que los clientes escriban uno, utilizando las funciones integradas, recomendamos a los clientes que busquen Orchard Core para este propósito.

RickAndMSFT
fuente
0

Dado que la autenticación debe configurarse durante el registro DI, deberá configurar todos los proveedores de inicio de sesión externos en general durante el registro de autenticación.

Durante ese paso, debe agregar todos los esquemas. Un esquema tiene una identificación / secreto de cliente fijo, por lo que debe iniciar su IdentityServer con todas las credenciales de proveedor de inicio de sesión externo, que admite para todos sus clientes. El nombre del esquema debe ser único.

Como ejemplo, el inquilino A podría tener un esquema "A_microsoft", el inquilino B podría tener un esquema "B_microsoft", etc.

A continuación, puede consultar esos esquemas de autenticación cuando llame a métodos en IdentityServer. Iniciar sesión, Desafío, Cerrar sesión, etc.

Tenga en cuenta que esto requerirá el arranque de IdentityServer de un conjunto completo de inquilinos. Dependiendo de su escenario, si los inquilinos se actualizan regularmente, también requerirá reinicios regulares del IdentityServer para conocer los nuevos esquemas de autenticación.


Si eso es un problema, probablemente pueda de alguna manera aumentar los esquemas de autenticación registrados durante el tiempo de ejecución de IdentityServer, pero no será fácil. Puede requerir implementaciones personalizadas más grandes del middleware de autenticación que viene con AspNetCore.

InDieTasten
fuente
0

¿Quiere decir que desea agregar soporte para múltiples proveedores de autenticación? Este documento ya especificó cómo agregar múltiples proveedores de autenticación en el servicio de configuración. No es necesario usar app.UseXXXmás para configurar la tubería usted mismo

Elendil Zheng-MSFT
fuente