Atualmente, criei um aplicativo Web do servidor de identidade 4 com provedores de login externos com ID e segredos de cliente padrão. Mas meu objetivo é registrar os provedores de autenticação como Azure, Google, Facebook com base no inquilino.
Eu usei o conjunto de multilocação do SaasKit , aqui tentei o middleware app.usepertenant () . Mas o método UseGoogleAuthentication () é obsoleto, portanto, não foi possível obter a autenticação de vários inquilinos usando esse middleware de uso frequente.
Código atual,
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddMicrosoftAccount(option =>
{
option.ClientId = "clientid";
option.ClientSecret = "clientsecret";
option.SaveTokens = true;
});
O código esperado é como abaixo,
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
fonte
fonte
Respostas:
Consulte os documentos oficiais da MS, provedores de autenticação por inquilino
A estrutura do ASP.NET Core não possui uma solução interna para autenticação de vários inquilinos. Embora seja certamente possível que os clientes escrevam um, usando os recursos internos, recomendamos que os clientes pesquisem o Orchard Core para esse fim.
fonte
Como a autenticação precisa ser configurada durante o registro DI, você precisará configurar todos os provedores de login externos em geral durante o registro da autenticação.
Durante essa etapa, você precisa adicionar todos os esquemas. Um esquema possui um ID / segredo de cliente fixo, portanto, você precisa inicializar seu IdentityServer com todas as credenciais de provedor de logon externo, suportadas por todos os seus clientes. O nome do esquema precisa ser exclusivo.
Como exemplo, o inquilino A pode ter um esquema "A_microsoft", o inquilino B pode ter um esquema "B_microsoft" etc.
Você pode consultar esses esquemas de autenticação ao chamar métodos no IdentityServer. SignIn, Challenge, SignOut etc.
Esteja ciente de que isso exigirá da inicialização do IdentityServer um conjunto completo de inquilinos. Dependendo do seu cenário, se os inquilinos forem atualizados regularmente, também será necessário reiniciar regularmente o IdentityServer para conhecer os novos esquemas de autenticação.
Se isso for um problema, você provavelmente poderá, de alguma forma, aumentar os esquemas de autenticação registrados durante o tempo de execução do IdentityServer, mas não será fácil. Pode exigir implementações personalizadas maiores do middleware de autenticação fornecido com o AspNetCore.
fonte
Quer dizer que você deseja adicionar suporte para vários provedores de autenticação? Este documento já especificou como adicionar vários provedores de autenticação no serviço de configuração. Você não precisa
app.UseXXX
mais usar para configurar o pipeline sozinhofonte