ServicePrincipleName-Setup für Web Service unter IIS 7

7

Ich bin so verwirrt.

Folgendes berücksichtigen:

  • Active Directory-Umgebung mit einer Domäne namens DOM
  • Eine IIS 7-Box mit dem NetBIOS-Namen VS1
  • Ein DNS-Eintrag, der einen Alias ​​für VS1 als pineapple.london.uk.corp bereitstellt
  • Ein Anwendungspool, der als DOM \ PineappleService ausgeführt wird
  • Windows-Authentifizierung aktiviert.
  • Clients verwenden HttpWebRequest, um die XML / JSON ASP.NET-Dienste auf der Box aufzurufen.

Der Dienst ruft Workstations im Netzwerk auf, um Informationen zu sammeln. Dies funktioniert in der Entwicklung, in der ich IIS Express verwende, das wie ich ausgeführt wird, da IISX nur eine EXE-Datei ist

In der Produktion funktionieren Dienste einwandfrei, die Authentifizierung funktioniert, aber das Aufrufen von Funktionen, die dazu führen, dass der Dienst (der als PineappleService ausgeführt wird) auf Inhalte im Netzwerk zugreift, schlägt fehl.

Ich vermute ein SPN-Registrierungsproblem, weiß aber nicht, welche SPNs eingerichtet werden sollen.

Zuletzt bin ich auf diesen Artikel gestoßen, der angesichts einiger anderer Artikel zu fliegen scheint:

http://blogs.msdn.com/b/webtopics/archive/2009/01/19/service-principal-name-spn-checklist-for-kerberos-authentication-with-iis-7-0.aspx

Beachten Sie, dass es heißt

Die SPN-Anforderungen bleiben dieselben wie oben. Sie müssen keine SPNs wie http / für Domain1 \ Username1 hinzufügen, anders als in IIS 6.0 (wo wir einen SPN der Form http / für die Application Pool-Identität hinzufügen mussten).

Ich weiß also nicht mehr, was richtig ist. Ich weiß nicht, ob ich HTTP-SPNs oder HOST-SPNs registrieren oder den DNS-Alias ​​oder den NetBIOS-Namen verwenden und diese auf dem PineappleService-Konto oder auf dem VS1-Computerkonto festlegen muss.

Ich kann nicht sagen, ob beim Ausprobieren ein Problem mit der langsamen AD-Replikation vorliegt, das bedeutet, dass ich zwischen Versuch und Irrtum eine Stunde warten muss.

Es ist jetzt alles so kompliziert. Ich habe 15 Jahre als Sysop und Entwickler gearbeitet und spüre das Ende von Domänen und Arbeitsstationen sowie von Rechten und Richtlinien. Es ist alles zu viel geworden.

Danke für Ihre Hilfe.

Luke

Luke Puplett
quelle

Antworten:

2

Dies sollte nicht versucht werden, bis es in der Entwicklung genau so konfiguriert und getestet wurde, wie es in der Produktion sein wird. Die Verwendung der Windows-Authentifizierung und des Identitätswechsels mit IIS und benutzerdefinierten Anwendungen kann sehr komplex sein. Selbst wenn es auf magische Weise in der Produktion funktionieren würde, ohne eine Entwicklungsumgebung zu haben, die die Produktion genau widerspiegelt, wären Sie völlig verloren, wenn Sie ein Problem untersuchen müssten.

SPN

Wenn ein SPN erstellt wird, ist es üblich, einen SPN sowohl für den fqdn als auch für den Kurznamen zu erstellen. Beispiel:

setspn.exe -A http/computer  
setspn.exe -A http/computer.domain.com  

Es wird empfohlen, dass diese mit dem Namen vor Windows 2000 (NetBIOS-Name) und dem DNS-Namen übereinstimmen, der beim Herstellen einer Verbindung zum Dienst verwendet wird. Wenn keiner dieser Namen der Name ist, der für die Verbindung zum Dienst verwendet wird, sollte auch für diesen Namen ein SPN vorhanden sein.

Doppelte SPNs, die für denselben Dienst / Namen auf verschiedenen Konten / Computern registriert sind, sind eine häufige Ursache dafür, dass die Kerberos-Delegierung nicht funktioniert. Mit Setspn können Sie gerne doppelte SPNs erstellen. Microsoft hat einen Hotfix herausgegeben, der dieses Verhalten korrigiert:

Ein doppelter SPN wird registriert, wenn Sie den Befehl setspn zusammen mit dem Schalter -a in Windows 7 oder Windows Server 2008 R2 https://support.microsoft.com/kb/2717045 ausführen

Der Zielcomputer, auf dem sich der Dienst befindet, benötigt den SPN.

   HTTP/computername.company.com
   HTTP/computername

Für die Delegation vertrauenswürdig

Das Computer- oder Benutzerkonto, das den Identitätswechsel ausführt, muss als Vertrauenswürdig für die Delegierung angegeben werden. Wenn ein Benutzerkonto den Identitätswechsel ausführt, muss das Computerkonto, auf dem der Identitätswechsel durchgeführt wird, auf dieselbe Weise auch als Vertrauenswürdig für die Delegierung konfiguriert werden.

Klicken Sie unter Active Directory-Benutzer und -Computer auf dem Computer oder Benutzerkonto auf die Registerkarte Delegierung. (Benutzerkonten zeigen die Registerkarte "Delegierung" nur an, wenn sie über einen SPN verfügt. Möglicherweise muss dem Benutzerkonto ein SPN wie RPC / Benutzername zugewiesen werden, damit die Registerkarte "Delegierung" angezeigt wird.)

Wählen Sie auf der Registerkarte "Delegierung" die Option "Diesem Benutzer / Computer für die Delegierung an einen Dienst vertrauen (nur Kerberos)" für eine uneingeschränkte Delegierung aus.

Wählen Sie unter Eingeschränkte Delegierung die Option "Diesem Benutzer / Computer nur für die Delegierung an bestimmte Dienste vertrauen" aus. Wählen Sie "Beliebiges Authentifizierungsprotokoll verwenden". Sie können auf Hinzufügen klicken und zu dem Computer navigieren, auf dem die Service-SPNs angekündigt werden, und diese hinzufügen. Beachten Sie, dass diese nicht als SPNs angezeigt werden, wenn Sie setspn.exe -L domain \ useraccount ausführen.

Delegierungsmodell

Sie müssen bestimmen, welches Delegierungsmodell verwendet werden soll. Diese Entscheidung kann aus Sicherheitsgründen erzwungen werden.

Unbeschränkt ermöglicht es einem Computer oder Dienstkonto, sich als Benutzer auszugeben. Dies ist äußerst leistungsfähig und wurde von vielen Organisationen vermieden.

Die eingeschränkte Delegierung beschränkt die Identitätswechselaktivität auf bestimmte Zielcomputer und -dienste (HTTP, CIFS, ...), mit denen ein Dienstkonto, das einen Identitätswechsel durchführt, möglicherweise eine Verbindung herstellen kann. Es bietet außerdem den zusätzlichen Komfort, dass es den Identitätswechsel eines Kontos ermöglicht, ohne über die Anmeldeinformationen des Kontos oder ein bereits vorhandenes Windows / Kerberos-Sicherheitstoken zu verfügen .

Mehrere Domänen

Die eingeschränkte Delegierung funktioniert nicht, wenn sich die FE / BE-Server in verschiedenen Domänen befinden.

Bei der eingeschränkten Delegierung muss sich das Konto / der Computer, der den Identitätswechsel ausführt, in derselben Domäne wie die Zielressource / der Zieldienst befinden. Diese Domäne ist normalerweise die "Ressourcendomäne". Die Konten, die sich als solche ausgeben, können sich in einer vertrauenswürdigen Domäne befinden, einschließlich vertrauenswürdiger Domänen in anderen Gesamtstrukturen.

Höhere Privilegien

Das Benutzerkonto, das den Identitätswechsel durchführt, muss das SetTCB-Privileg (als Teil des Betriebssystems fungieren) auf dem Computer besitzen, auf dem der Code ausgeführt wird, der den Identitätswechsel ausführt. Beachten Sie, dass unter Windows Vista / 7/2008 die SetTCB-Berechtigung möglicherweise nur von Prozessen mit einer hohen Integritätsstufe gehalten wird. Daher muss das Konto möglicherweise der lokalen Administratorgruppe hinzugefügt werden.

Die Identität der autorisierten Benutzer muss Mitglied der lokalen Benutzergruppe auf dem Computer sein, auf dem der Identitätswechsel durchgeführt wird.

Als Teil des Betriebssystems fungieren kann mit gpedit.msc oder gpmc.msc zugewiesen werden. Es befindet sich unter Computer> Windows-Einstellungen> Sicherheitseinstellungen> Lokale Richtlinien> Zuweisung von Benutzerrechten.

Funktionsweise des Kerberos Version 5-Authentifizierungsprotokolls
http://technet.microsoft.com/en-us/library/cc772815%28WS.10%29.aspx

  • Wenn die Option Nur Kerberos verwenden ausgewählt ist, verwendet das Konto eine eingeschränkte Delegierung ohne Protokollübergang.
  • Wenn die Option Authentifizierungsprotokoll verwenden ausgewählt ist, verwendet das Konto eine eingeschränkte Delegierung mit Protokollübergang.

Wütend! Nachdem Sie alles richtig konfiguriert haben, können Sie alles zu einem einfachen Testfall zusammenfassen, der leicht zu beheben ist. Angenommen, Sie haben einen SPN für CIFS \ fileserver.company.com erstellt und möchten sich als [email protected] ausgeben und auf eine Freigabe auf diesem Server zugreifen:

// no password required with constrained delegation
using (WindowsIdentity id = new WindowsIdentity("[email protected]"))
using (WindowsImpersonationContext wic = id.Impersonate())
{
    // ImpersonationLevel will be "Impersonation" when constrained delegation is setup correctly
    // It will be "Identification" if the account performing impersonation does not have SetTCB privilege
    Debug.WriteLine("ImpersonationLevel: " + id.ImpersonationLevel);
    // Authentication type should be "Kerberos"
    Debug.WriteLine("AuthenticationType: " + id.AuthenticationType);
    Debug.WriteLine("Username: " + WindowsIdentity.GetCurrent().Name);

    Debug.WriteLine("Groups:");
    foreach (IdentityReference identity in id.Groups)
    {
        NTAccount ntaccount = identity.Translate(typeof (NTAccount)) as NTAccount;
        Debug.WriteLine("Account: " + ntaccount.Value + " SID: " + identity.Value);
    }

    // This will fail with access denied if constrained delegation is not setup properly.  
    // On the target server/resource, if it fails it may show an attempt to logon using anonymous
    string[] fileNames = Directory.GetFiles(@"\\fileserver.company.com\ShareName");
    foreach (string fileName in fileNames)
    {
        Console.WriteLine(fileName);
    }
}
Greg Askew
quelle
1
Hallo Greg, vielen Dank, dass du dir die Zeit genommen hast, das alles zu schreiben. Ich untersuche, was Sie mit einem Server-Typ hier gesagt haben. Im Moment möchte ich klarstellen, dass ich keinen Identitätswechsel verwende. Serverseitiger Code ruft nur Ressourcen im LAN im Kontext des Anwendungspools (dh PineappleService) auf.
Luke Puplett
1

Dies ist höchstwahrscheinlich überhaupt kein SPN-Problem. Höchstwahrscheinlich hat der Anwendungspool, der unter Ihrem Dienstkonto (PineappleService) ausgeführt wird, keine Berechtigung zum Zugriff auf die Ressourcen im Netzwerk. Sie haben keine Fehlermeldungen angegeben, aber es klingt wirklich nach einem einfachen Berechtigungsproblem.

Sie müssen sicherstellen, dass Ihr Dienstkonto Zugriff auf alles hat, was Sie abrufen möchten (Sie sollten dies in Ihrer Frage näher erläutern), sei es Dateien, Informationen usw.

Zum Testen könnten Sie Ihr Dienstkonto einfach zu einem Administrator in der Domäne machen, aber Sie sollten es verdammt noch mal nicht so lassen wie bei der Bereitstellung nach der Produktion.

Brent Pabst
quelle
Hey Brent, wenn ich einfach RunAs oder NET USE vom Server mit dem PineappleService-Konto creds verwende, kann ich auf Remote-Ressourcen zugreifen. Aus diesem Grund vermute ich, dass ein Problem vom Typ Kerberossy SPNy vorliegt. Danke für deine Antwort.
Luke Puplett
Sofern Sie sich nicht als mehrere Ressourcen ausgeben und durch diese springen, ist dies kein Grund, warum die Anwendung oder die Clients standardmäßig Kerberos-Suchvorgänge ausführen müssten. Sie sollten lediglich den einfachen alten Verhandlungs- / NTLM-Zugriff verwenden. Ihr Setup klingt für ASP.NET ziemlich normal und ich bin noch nie zuvor auf ein solches SPN-Problem gestoßen.
Brent Pabst
Hallo Brent, ich habe Ihnen Punkte gegeben, als ob ich nie auf den Grund gegangen wäre. Ich denke, es gab einige sehr ausgefeilte Richtlinien, um zu verhindern, dass sich sogar Administratoren in einige Dienste einmischen. Ich habe den Fehler nicht aufgenommen, da es einer dieser seltsamen Fehler war, bei denen MS keine guten Entscheidungen getroffen hat. Es hätte die Leute mehr verwirrt.
Luke Puplett