6

Ich verwende das folgende Codebeispiel, um die Azure AD-Anmeldung mit meiner Anwendung zu verbinden (https://github.com/AzureADSamples/WebApp-OpenIDConnect-DotNet).Benutzer zur benutzerdefinierten Anmeldeseite umleiten, wenn Azure AD verwendet wird

Ich finde, dass der Code gut funktioniert, aber ich möchte Fähigkeit haben, einen Benutzer zu einer benutzerdefinierten Anmeldeseite umzuleiten, wenn der Benutzer noch nicht angemeldet ist oder ihre Sitzung abgelaufen ist. Ich kämpfe jedoch, um dies zur Arbeit zu bringen und fragte mich, ob das überhaupt möglich ist?

Ist es von Entwurf, dass der Benutzer immer zu der Microsoft-Anmeldeseite für Azure AD statt Ihrer eigenen benutzerdefinierten Seite umgeleitet wird, oder gibt es eine Einstellung, die ich verpasst habe?

Ich habe den mitgelieferten Code in FilterConfig.cs geändert, um das Autorisieren Filter Attribut zu aktivieren:

filters.Add(new AuthorizeAttribute()); 

Ich habe auch folgendes web.config aber ohne Effekt hinzugefügt:

<authorization> 
<allow users="?" /> 
</authorization> 

Innerhalb der Startup.Auth.cs Datei Ich kann keine Änderungen sehen, die zu app.UseOpenIdConnectAuthentication möglich sind, um mir zu erlauben, eine allgemeine Anmeldeseite zu gründen, wie ich möglicherweise mit cookies-basierter Berechtigung tun kann.

Antwort

9

Nach einigem Zurückgehen über den Code habe ich die Lösung zu meinem Problem gefunden.

Innerhalb Startup.Auth.cs:

app.UseCookieAuthentication(new CookieAuthenticationOptions { 
    LoginPath = new PathString("/Account/Login") 
}); 

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions { 
     ClientId = clientId, 
     Authority = authority, 
     PostLogoutRedirectUri = postLogoutRedirectUri, 
     AuthenticationMode = AuthenticationMode.Passive 
}); 

Es ist die Einbeziehung der AuthenticationMode = AuthenticationMode.Passive Linie, die OpenIdConnectAuth von der Durchführung der automatischen 302 Umleitung auf die AAD Login-Seiten zu stoppen scheint.

+0

@BenV kombiniert Ihren Vorschlag der Verwendung von AAD Premium für benutzerdefinierte AAD-Login-Bildschirm mit den oben genannten Ich denke, das ist ein weitaus besserer Ansatz für eine etwas angepasste Login-Flow. – choms79

+0

Wenn ich diese Antwort mehr als einmal aufheben könnte, würde ich. –

0

Angenommen, Azure AD ist Ihr Identitätsanbieter, Sie können Customize the login page, aber Sie müssen Azure AD Premium ausführen, um dies zu tun.

+0

Danke für diese @BenV, ich hatte gehofft, dass ich vollständige Kontrolle innerhalb meiner App und eine benutzerdefinierte Login-Seite präsentieren könnte, wann immer Autorisierung erforderlich war, d. H. Http: // /Account/Login. Ich schätze, du kannst das nicht, weil das den Zweck von AD Premium vereitelt. – choms79

+0

Die Idee ist, dass Sie, anstatt die Verantwortung für das sichere Sammeln und Transportieren der Benutzeranmeldeinformationen selbst zu übernehmen, diese Verantwortung an AAD delegieren können. – BenV

0

Dies vielleicht, was ich suche ...

erlaubt Dieses Beispiel ein Benutzer Azure AD einzuloggen ohne die Notwendigkeit, die nativen browserbasierten Logins von Azure AD zu verwenden.

Ich verstehe, dass dies ein Anti-Muster ist, da ich auf die eingebauten Mechanismen von Azure zum Umgang mit Multi-Faktor-Authentifizierung, Passwort-Reset usw. verzichten werde, aber ich werde die volle Kontrolle über die Erfahrung behalten.

==== Bearbeiten ==== Dies ist nicht die Art, wie ich gehen möchte, da ich eine Menge von dem, was AAD bietet, aus der Box strippen wird. Im Wesentlichen möchte ich AADs Kontrollflüsse behalten, aber ich will nur die Fähigkeit haben, zu kontrollieren, auf welcher Seite ein Benutzer landet, wenn ein Benutzer nicht angemeldet ist.

Gegenwärtig ist der Fluss: Nicht autorisiert -> 302-Weiterleitung -> AAD Login

ich möchte: Nicht autorisiert -> 302-Weiterleitung -> Selbst gehostet Login erforderlich Seite -> Benutzeranmeldung Taste drücken -> 302-Umleitung -> AAD Login

Sein dieser Fluss Ich kann nicht funktionieren.

+0

Dadurch wird auch das OAuth-Protokoll (das für die delegierte Autorisierung vorgesehen ist) für die Authentifizierung missbraucht, die [einige sagen] (http://www.thread-safe.com/2012/01/problem-mit-authentifizierung-authentifiziert) .html) öffnet einige Sicherheitslücken. Aber ja, es ist technisch möglich und Sie behalten die volle Kontrolle über die UX. – BenV