Wir versuchen, den wunderbaren IdentityServer für unser Produkt zu verwenden. Ihre Anwendung sollte in der Lage sein, mit verschiedenen Mandanten zu arbeiten, und jeder Mandanten könnte eigene Identitätsanbieter haben.Mehrere OpenIdConnectAuthentication-Middlewares für Multitenancy
Der IdentityServer Teil „könnte“ (es funktioniert, aber ich bin nicht sicher, ob das Super klug ist) wie folgt gelöst werden:
app.Map("/demotenant", (test) =>
{
test.UseIdentityServer(new IdentityServerOptions
{
SiteName = "Embedded IdentityServer",
SigningCertificate = Certificate.Load(),
Factory = factory,
RequireSsl = false,
AuthenticationOptions = new AuthenticationOptions
{
EnableLocalLogin = false,
IdentityProviders = ConfigureIdentityProviders,
},
});
});
app.Map("/demotenant2", (test) =>
{
test.UseIdentityServer(new IdentityServerOptions
{
SiteName = "Embedded IdentityServer",
SigningCertificate = Certificate.Load(),
Factory = factory,
RequireSsl = false,
AuthenticationOptions = new AuthenticationOptions
{
EnableLocalLogin = false,
IdentityProviders = ConfigureIdentityProviders,
},
});
});
Jetzt habe ich versucht, dies aus meiner Webapplikation zu verwenden. Wenn ich arbeite/demotenant sollte es den/demotenant-Identität-Server verwendet usw.
app.Map("/demotenant", (test) =>
{
test.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationType = "cookies",
});
test.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions()
{
AuthenticationType = "oidc",
SignInAsAuthenticationType = "cookies",
Authority = "http://localhost:63958/demotenant",
ClientId = "webapp",
RedirectUri = "http://localhost:57354/",
ResponseType = "id_token",
Scope = "openid",
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = async f =>
{
f.ProtocolMessage.AcrValues = "datasourceId:test";
},
},
});
});
app.Map("/demotenant2", (test) =>
{
test.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationType = "cookies",
});
test.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions()
{
AuthenticationType = "oidc",
SignInAsAuthenticationType = "cookies",
Authority = "http://localhost:63958/demotenant2",
ClientId = "webapp",
RedirectUri = "http://localhost:57354/",
ResponseType = "id_token",
Scope = "openid",
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = async f =>
{
f.ProtocolMessage.AcrValues = "datasourceId:test";
}
},
});
});
Leider funktioniert es nicht oder zumindest kann ich nicht den Authentifizierungsablauf auslösen.
Mein "einfaches" Beispiel verwendet nur das Attribut [Autorisieren], das mich auf magische Weise zu meinem IdentityServer weiterleitet. So ist die Frage:
- Ist es möglich, eine der Autorisierung basierend auf einem Routing auszulösen, wenn ja: Wie?