2009-07-31 9 views
6

Ich habe ein paar Websites für die Arbeit, die außerhalb des Unternehmens-LAN - und daher außerhalb der direkten Kommunikation Bereich von Active Directory (A/D) - aber für die ich möchte in der Lage sein, Benutzer zu authentifizieren gegen die A/D-Server des Unternehmens sowie ein sekundäres Repository von Benutzern/Rollen ***. Der Pseudocode für diese Aktivität lautet wie folgt:Wie authentifiziere ich mich über ASP.NET-Webdienstcode bei Active Directory?

  1. Der Benutzer gibt Benutzername/Passwort in das Anmeldeformular der externen Website ein.
  2. Externe Website ruft einen Webservice im LAN auf, der mit A/D kommunizieren kann.
  3. Der Webservice überprüft, ob der Benutzername/das Passwort authentifiziert werden kann und einem Benutzer in A/D zugeordnet ist. Wenn ja, geben Sie die Liste der A/D-Rollen zurück, deren Mitglied der Benutzer ist.
  4. Wenn der Benutzername/das Kennwort nicht für A/D gefunden/authentifiziert werden kann, überprüfen Sie eine Datenbank/einen Dienst, der das sekundäre Repository der Benutzer-/Rolleninformationen ist. Gibt alle Rollen zurück, bei denen sie verwendet werden, wenn sie sich beim sekundären Authentifizierungsserver authentifizieren.
  5. Geben Sie die Liste der Rollen zurück, in der sich der Benutzer befindet, auf der aufrufenden Website.

*** Die Idee ist, dass wir nicht Dutzende - möglicherweise Hunderte - von Auftragnehmern und Affiliates in Active Directory einfügen wollen, wenn sie sich nur auf unseren externen Webservern einloggen. Daher das sekundäre Auth-Schema.

Antwort

1

Ich denke, ein paar Schichten gibt es hier, jeder seine eigene Frage:

Wie kann ich einen Web-Service in meinem LAN von der DMZ bekommen?
Dies ist eine schwierige Sache, da es wirklich das Konzept einer DMZ/LAN-Trennung durchbricht. Im Allgemeinen sind Verbindungen zwischen LAN und DMZ nur (und in begrenztem Umfang) von der LAN-Seite aus erlaubt - auf diese Weise kann eine komprimierte DMZ keinen Kontakt mit dem LAN initiieren und ist extrem eingeschränkt in dem was sie tun kann (sie kann nicht ausgeben) beliebige Anfragen, antworten nur auf Anfragen vom LAN).

Wie kann ich einen Dienst auf einem anderen Computer verwenden, um einen Benutzernamen/ein Passwort zu authentifizieren?
Wieder ist dies ein Problem - Sie übergeben Passwörter über ein Netzwerk - ist es möglich, dass sie abgefangen werden. Bei AD wird dies mit Kerberos gelöst - einem System von Challenge/Response, das sicherstellt, dass das Passwort niemals wirklich übertragen wird. Natürlich sind Kerberos und ähnliche Protokolle ziemlich komplex - Sie sollten nie versuchen, Ihre eigenen zu rollen, da es wahrscheinlich weniger sicher ist, als etwas zu benutzen - zum Beispiel könnte Ihr Webservice auf https laufen, so dass zumindest die Passwörter nur Klartext sind zwei Server und nicht die Kommunikationsverbindung dazwischen. Zertifikate können auch verwendet werden, um zu verhindern, dass Datenverkehr für Ihren LAN-Webservice auf eine komprimierte DMZ-Maschine umgeleitet wird (die komprimierte DMZ-Maschine kann das Zertifikat nicht fälschen, sodass Ihr System feststellen kann, dass es zuvor mit einem falschen Server verbunden war) Senden von Details zur Authentifizierung)

In meiner eigenen Erfahrung führen diese Probleme dazu, dass AD außerhalb des LANs nicht ausgeführt wird. Unternehmen entscheiden sich entweder dafür, Leute über das LAN mit VPN zu authentifizieren, die mit RSA-Schlüsseln authentifiziert sind (diese kleinen Schlüsselanhänger, die ständig wechselnde Nummern anzeigen), oder sie verwenden einen ganz eigenen Satz von Logins für die DMZ-Bereichsdienste.

+0

Die "externen" Webserver sind in der DMZ und können nicht direkt auf die A/D-Server zugreifen. Es gibt jedoch eine Firewallregel, die Port 80/443-Datenverkehr von den spezifischen DMZ-IP-Adressen der externen Webserver an die spezifische Port-/IP-Adresse des internen (asp.net) App-Servers zulässt. Zukünftig können wir die Server vollständig extern lagern, aber die Firewall-Ausnahme nach Port und IP würde den externen Webservern weiterhin ermöglichen, Webdienstaufrufe auf dem internen App-Server aufzurufen. –

1

Sie können sich diese beiden Ressourcen ansehen. Der erste zeigt Ihnen alles, was Sie über Active Directory wissen möchten, und der zweite zeigt Ihnen, wie Sie sich verbinden.obwohl

Sie könnten Herausforderungen an den Remote-AD-Server verbunden haben. Als eine mögliche Umgehung würde ich erwägen, die Webanwendung einen Authentifizierungswebdienst aufrufen zu lassen, der sich im Firmennetzwerk befindet.

+0

Ich denke, Sie wollten die Links trennen: http://www.codeproject.com/KB/system/everythingInAD.aspx http://msdn.microsoft.com/en-us/library/aa302397.aspx –

+0

ja , aber mir ist nur ein Link erlaubt, und beide sind notwendig. Ich fand sie beide sehr nützlich für eine Implementierung eines ähnlichen Problems, das ich hatte. – andrewWinn

0

Sie können dies möglicherweise vereinfachen, indem Sie Kontraktoren/Partnern ein anderes Anmeldeportal geben.

+0

Die betreffenden Apps werden sowohl von internen (A/D) Benutzern als auch von externen (nicht A/D) Benutzern verwendet. Ein Login muss beide Szenarien abdecken. –