Actuellement, j'ai créé une application Web Identity Server 4 avec des fournisseurs de connexion externes avec l'ID client et les 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é SaasKit Assembly multi-tenancy, ici j'ai essayé app.usepertenant () middleware. Mais seGoogleAuthentication () méthode est obsolète, donc je n'ai pas pu obtenir une authentification multi-locataire en utilisant 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);
});
Voulez-vous dire que vous souhaitez ajouter la prise en charge de plusieurs fournisseurs d'authentification? Ce document déjà spécifié comment ajouter plusieurs fournisseurs d'authentification dans le service de configuration. Pas besoin d'utiliser app.UseXXX
plus pour configurer le pipeline par vous-même
É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 client-id/secret fixe, vous devez donc bootstrap 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, Challenge, SignOut, etc.
Sachez que cela nécessitera de démarrer IdentityServer sur un ensemble complet de locataires. En fonction de votre scénario, si les locataires sont mis à jour régulièrement, il faudra également des redémarrages réguliers de IdentityServer pour connaître les nouveaux schémas d'authentification.
Si cela pose un problème, vous pouvez probablement augmenter d'une manière ou d'une autre 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.