Registrar esquemas de autenticação com base no inquilino no asp.net core 3.1


12

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


Talvez você possa encontrar uma resposta ou uma solução alternativa neste tópico .
Ruard van Elburg

@RuardvanElburg obrigado pela sua resposta, a partir do seu tópico sugerido, podemos atualizar as opções de esquemas já registrados com base no inquilino durante o início do aplicativo. Depois não podemos atualizá-los.
Madhan kumar D

Deseja ter configurações diferentes de ClientId / ClientSecret por locatário? Ou você deseja adicionar apenas esquemas diferentes com base no inquilino?
Kirk Larkin

@KirkLarkin esquemas diferentes com o ID / segredo do respectivo inquilino. Como abaixo, if (tenant.hasMicrosoft) {authentication.AddMicrosoftAccount (opção => {option.ClientId = "clientid"; option.ClientSecret = "clientsecret"; option.SaveTokens = true;}); }
Madhan kumar D

alguma atualização disso?
Madhan kumar D 28/01

Respostas:



0

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.


0

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.UseXXXmais usar para configurar o pipeline sozinho

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.