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);
});
authentication
asp.net-core
identityserver4
multi-tenant
saaskit
Madhan kumar D
fuente
fuente
Respuestas:
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.
fuente
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.
fuente
¿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.UseXXX
más para configurar la tubería usted mismofuente