Wie unterstützt man NTLM-Authentifizierung mit Fallback in ASP.NET MVC?
Wie kann ich das umsetzen in folgenden ASP.NET MVC-Anwendung:
- Benutzer öffnet intranet-website
- Benutzer automatisch authentifiziert, wenn möglich
- wenn die NTLM-Authentifizierung nicht geklappt hat, zeige login-Formular für Benutzer
- Benutzer angeben, login-Passwort ein und wählen Sie die Domäne aus der Liste der vordefinierten Domänen
- Benutzer authentifiziert ist im code mithilfe von AD
Ich weiß, wie das umzusetzen, 4 und 5, aber nicht finden können, Informationen, wie zu kombinieren, NTLM und Formen.
So dass die NTLM-native-login - /Kennwort-Dialogfeld wird nie angezeigt - transparente Authentifizierung oder gut aussehende login-Seite.
Wie sollte das funktionieren?
Sollte der Benutzer gebeten werden, login und Passwort?
Können Ihre aktuellen Anmeldeinformationen (Domäne, Benutzername) verwendet werden, ohne zu Fragen, geben Sie login und Passwort?
UPDATE für diese Untersuchung gleiche problem:
Wenn ich gefragt wurde war ich nicht ganz verstehen, wie die NTLM-Authentifizierung intern arbeitet.
Wichtig hier zu verstehen ist, dass, wenn der browser des Nutzers nicht unterstützt NTLM-richtig oder wenn die NTLM-Unterstützung ist durch den Benutzer deaktiviert - server bekommst nie eine chance, dies zu umgehen.
Wie die Windows-Authentifizierung arbeiten:
- - Client-senden Sie eine normale HTTP-Anfrage an den server
- Server antwortet mit HTTP-status 401 und der Hinweis darauf, dass die NTLM-Authentifizierung verwendet werden muss, um den Zugriff auf Ressourcen
- Client NTLM senden Type1 Nachricht
- Server antwortet mit NTLM-2-Nachricht mit der Herausforderung
- Client senden Type3-Nachricht mit der Antwort auf die Herausforderung
- - Server antwortet mit dem tatsächlichen Inhalt angefordert
Wie Sie sehen, der browser unterstützt keine NTLM wird nicht gehen Sie zu Schritt (3), anstatt die user angezeigt werden IIS generierten Error-401 Seite.
Wenn Benutzer keine Anmeldeinformationen haben, nach dem Abbruch der NTLM-Authentifizierung popup-dialog-Fenster-browser nicht weiter zu (3).
So haben wir keine chance, automatisch umleiten Benutzer auf benutzerdefinierte login-Seite.
Die einzige Möglichkeit, hier eine "gateway" - Seite, wo wir entscheiden, ob Benutzer sollte die Unterstützung der NTLM-und wenn ja, leiten Sie zur NTLM-geschützte Homepage.
Ist und wenn nicht, zeige login-Formular und ermöglichen die Authentisierung durch manuelle Eingabe von login und Passwort.
Entscheidung ist in der Regel basierend auf Nutzer-IP-Adresse und/oder host-Namen entweder durch passende IP-Bereiche oder durch überprüfen der Tabelle der vordefinierten IPs.
InformationsquelleAutor der Frage Igor Romanov | 2010-10-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Artikel könnten Sie schon in die richtige Richtung. Grundsätzlich haben Sie zwei apps in zwei virtuelle Verzeichnisse unter den gleichen host-Namen. Eine app die Formularauthentifizierung verwendet werden, benutzt man Windows. Die man mithilfe der Windows-Authentifizierung schafft eine gültige form der Authentifizierung cookie und leitet den Browser zu der zweiten virtuellen Verzeichnis.
ASP.NET die Authentifizierung im Gemischten Modus
InformationsquelleAutor der Antwort Pete Nelson
Habe ich genau dieses setup in der Produktion, ich meine setup-portal zu verwenden FormsAuth und schrieb eine Funktion, die nimmt die Besucher mit IP zu suchen, bis Sie das Benutzerkonto, das angemeldet ist, die IP /PC. Mit den Namen, finde ich (zB.
DOMAIN\user
), Ich überprüfen, dass die Domäne passt zu meiner Domäne und den Benutzernamen /account ist gültig in meinem FormsAth Anbieter mitMembership.GetUser(<user>)
. Wenn dieser Aufruf gibt ein Spiel und die userIsApproved
ich eineFormsAuthenticationTicket
& cookie für den Benutzer. Ich habe 400+ Leute auf das Netzwerk und das funktioniert perfekt, der einzige Computer, der noch login sind (1. Benutzer ohne Konto in mein portal 2. Ein paar MAC/Linux-Anwender, 3. Mobile Benutzer, die nicht boot auf dem Netzwerk und hatte von Gruppenrichtlinien aktivieren Sie Ihre Firewall zu Hoch).Den Haken an dieser Lösung ist, dass es erfordert Identitätswechsel von einem Domänen-admin-Konto für die Abfrage der Nutzer-PC, und die Verwendung von nicht verwaltetem code netapi32.dll.
Hier ist der code, den ich verwenden (externe Funktion ruft nicht zur Verfügung gestellt, aus Platzgründen). Ich habe versucht, das zu vereinfachen ein wenig, da haben Sie VIELE externe Anrufe.
Nun mit dem Konto, wir schnappten uns in der ersten Funktion/Prozess, versuchen wir nun, zu überprüfen und zu entscheiden, ob wir sollten zeigen, login oder auto-login des Benutzers.
Schrieb ich einen blog-post über das eine lange Zeit her, hier ist ein link zu dem wrapper für netapi32.dll und meine Identitätswechsel Helfer, die ich in der post Source Code Download
InformationsquelleAutor der Antwort Zachary
Können Sie nicht haben, NTLM-und FormsAuthentication in der gleichen ASP.NET -Anwendung. Sie benötigen zwei verschiedene Anwendungen in separaten virtuellen Verzeichnisse.
InformationsquelleAutor der Antwort Darin Dimitrov