Enregistrer les schémas d'authentification basés sur le locataire dans asp.net core 3.1

12

Actuellement, j'ai créé une application Web Identity Server 4 avec des fournisseurs de connexion externes avec un identifiant client et des secrets par défaut. Mais mon objectif est d'enregistrer les fournisseurs d'authentification comme Azure, Google, Facebook en fonction du locataire.

J'ai utilisé l' assembly multi-locataires SaasKit , ici j'ai essayé le middleware app.usepertenant () . Mais la méthode UseGoogleAuthentication () est obsolète, je n'ai donc pas pu obtenir d'authentification multi-locataire à l'aide de ce middleware usepertenant.

Code actuel,

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

Le code attendu est comme ci-dessous,

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
la source
Vous pouvez peut-être trouver une réponse ou une solution de contournement dans ce fil .
Ruard van Elburg
@RuardvanElburg merci pour votre réponse, à partir de votre fil suggéré, nous pouvons mettre à jour les options de schémas déjà enregistrées en fonction du locataire lors du démarrage de l'application. Après, nous ne pouvons pas les mettre à jour.
Madhan kumar D
Voulez-vous avoir différents paramètres ClientId / ClientSecret par locataire? Ou souhaitez-vous uniquement ajouter des schémas différents en fonction du locataire?
Kirk Larkin
@KirkLarkin différents schémas avec clientId / secret du locataire respectif. Comme ci-dessous, si (tenant.hasMicrosoft) {authentication.AddMicrosoftAccount (option => {option.ClientId = "clientid"; option.ClientSecret = "clientsecret"; option.SaveTokens = true;}); }
Madhan kumar D
Une mise à jour pour ceci?
Madhan kumar D

Réponses:

3

Voir les documents MS officiels, fournisseurs d'authentification par locataire

Le cadre ASP.NET Core n'a pas de solution intégrée pour l'authentification multi-locataire. Bien qu'il soit certainement possible pour les clients d'en écrire un, en utilisant les fonctionnalités intégrées, nous recommandons aux clients de se pencher sur Orchard Core à cet effet.

RickAndMSFT
la source
0

Étant donné que l'authentification doit être configurée lors de l'enregistrement DI, vous devrez configurer tous les fournisseurs de connexion externes en général lors de l'enregistrement de l'authentification.

Au cours de cette étape, vous devez ajouter tous les schémas. Un schéma a un identifiant client / secret fixe, vous devez donc amorcer votre IdentityServer avec toutes les informations d'identification du fournisseur de connexion externe, que vous prenez en charge pour tous vos clients. Le nom du schéma doit être unique.

Par exemple, le locataire A peut avoir un schéma "A_microsoft", le locataire B peut avoir un schéma "B_microsoft", etc.

Vous pouvez ensuite vous référer à ces schémas d'authentification lors de l'appel de méthodes dans IdentityServer. Connexion, défi, déconnexion, etc.

Sachez que cela nécessitera d'amorcer IdentityServer un ensemble complet de locataires. Selon votre scénario, si les locataires sont mis à jour régulièrement, il faudra également redémarrer régulièrement IdentityServer pour être au courant des nouveaux schémas d'authentification.


Si c'est un problème, vous pouvez probablement augmenter en quelque sorte les schémas d'authentification enregistrés pendant l'exécution d'IdentityServer, mais ce ne sera pas facile. Cela peut nécessiter des implémentations personnalisées plus importantes du middleware d'authentification fourni avec AspNetCore.

InDieTasten
la source
0

Voulez-vous dire que vous souhaitez ajouter la prise en charge de plusieurs fournisseurs d'authentification? Ce document spécifiait déjà comment ajouter plusieurs fournisseurs d'authentification dans le service de configuration. Plus besoin de l'utiliser app.UseXXXpour configurer vous-même le pipeline

Elendil Zheng-MSFT
la source