Ich habe eine MVC-Anwendung für unser Intranet, die NTLM-Authentifizierung verwendet, aber ich möchte in der Lage sein, externen Benutzern den Zugriff auf die Anwendung zu ermöglichen. Alle externen Verbindungen zu unserem Intranet kommen über ein NAT und haben daher eine einzige IP-Adresse, die verwendet werden kann, um festzustellen, ob die Anfrage extern ist oder nicht. Ich möchte, dass alle internen Benutzer die NTLM-Authentifizierung durchlaufen, wie sie es bereits tun, dass aber jede Verbindung, die von der externen IP-Adresse kommt, automatisch eine anonyme Authentifizierung erhält ("anonym" ist jeder potenzielle Standardbenutzer, z. B. der Standard-Netzwerkdienst oder das IUSR_-Konto, ein bestimmter Domänenbenutzer (der natürlich für andere Zwecke streng gesperrt ist) usw.). Das Ergebnis ist, dass niemand eine Kennwortanforderung sehen sollte, es sei denn, er ist intern und hat einen Browser, der standardmäßig NTLM verwendet.
Ich weiß, dass die Authentifizierung im gemischten Modus in der Regel bestenfalls umständlich ist, aber ich frage mich, ob es für diesen speziellen Anwendungsfall vielleicht eine andere Möglichkeit gibt, das Problem zu umgehen. Einige der Möglichkeiten, die ich in Betracht gezogen habe, sind:
- Abfangen der Anfragen, bevor sie das WindowsAuthenticationModule erreichen, entweder in IIS, einem der Ereignisse in global.asax oder einem HTTPHandler, so dass wir die Authentifizierung für einen bestimmten Benutzer einfügen können.
- Gibt es beim NAT eine Möglichkeit, NTLM-Header in die HTTP-Anfrage für einen bestimmten Benutzer einzufügen?
- Da die externen Benutzer über einen anderen Host darauf zugreifen (der DNS wird auf deren Seite gehandhabt, um mit ihren Namenskonventionen übereinzustimmen), veranlassen Sie IIS, eine einfache Proxy-Site zu bedienen, die eine Anfrage entgegennimmt, die Anfrage mit NTLM eines bestimmten Benutzers an die Hauptwebsite weiterleitet und die Antwort an den ursprünglichen Anfrager zurückschickt.