Frage

Ich habe eine ASPX-Seite (auf Server A), die NTLM-Anmeldeinformationen aufgerufen wird, verwendet wird. Ein Teil dieser Job Seite ist eine HTML-Seite aufrufen (On Server B) und Proxy es zurück an den Client. (Die Firewall ermöglicht den Zugriff auf A, aber nicht beschränkt auf B. Der Benutzer normalerweise Zugriff auf beiden Servern erlaubt werden.). Server B ist auch nicht offen für den anonymen Zugriff, also muss ich Anmeldeinformationen, um es zu liefern.

Wenn ich einige Anmeldeinformationen (wie in der beigefügten Code) codieren, es funktioniert, aber im Idealfall würde ich die Anmeldeinformationen Echo, das von der ASPX-Seite empfangen wurden. Gibt es eine Möglichkeit, dieses NetworkCredentials zu bekommen, damit ich sie weitergeben kann?

protected void Page_Load(object sender, EventArgs e) { 
    Response.Clear(); 
    WebClient proxyFile = new WebClient(); 
    CredentialCache cc = new CredentialCache(); 
    cc.Add(new Uri("http://serverB/"), "NTLM", 
        new NetworkCredential("userName", "password", "domain")); 
    proxyFile.Credentials = cc; 

    Stream proxyStream = proxyFile.OpenRead("http://serverB/Content/webPage.html"); 
    int i; 
    do { 
        i = proxyStream.ReadByte(); 
        if (i != -1) { 
            Response.OutputStream.WriteByte((byte)i); 
        } 
    } while (i != -1); 
    Response.End(); 
} 
War es hilfreich?

Lösung

Sie können natürlich auch den Login-Namen des Anrufers erhalten, aber nicht das Passwort. NTLM verwendet ein Challenge / Response-Mechanismus, so dass das Passwort wird nie gesendet. Ihr Server muss Zugang zu einem Passwort-Äquivalent hat (ein Hash), um die Herausforderung an und überprüfen Sie die Antwort zu bilden, aber selbst wenn Sie halten es, dass Passwort-äquivalent wird keine Verwendung für Sie bei dem Versuch, sein erhalten können Anmeldeinformationen zu bilden, wird vom Server B akzeptiert werden.

Wenn Sie Identitätswechsel einrichten können, wie in einer anderen Antwort beschrieben, auch, dass man nicht unbedingt, was Sie wollen. Standardmäßig wird ein impersonating Server-Prozess nicht erlaubt, seine Identität auf einem anderen Server zu übertragen. Der zweite Hop als Delegation bekannt und muss (und / oder in Active Directory) explizit auf den Servern beteiligt konfiguriert werden.

Neben der Delegation denke ich, die einzige Möglichkeit ist, eine Datenbank von Anmeldeinformationen zu erhalten, die Server A und Gegenwart zu Server B. Gebäuden, das Zugriff auf eine sichere Art und Weise ist ein subtiler und zeitaufwändiger Prozess. Auf der anderen Seite gibt es einen Grund, warum Delegation standardmäßig deaktiviert ist. Wenn ich in einen Server anmelden, will ich es erlaubt zu sein, meine Identität zu verwenden, für andere Server zugreifen? Delegation ist die einfachste Möglichkeit für Sie, aber Sie müssen sicher sein müssen, dass Server A kann nicht mit Ihrer Benutzeridentität unverantwortlich Dinge zu tun, beeinträchtigt werden.

Andere Tipps

Page.User finden Sie die Sicherheitsprinzipal des Benutzers erhalten die Seite unter ausgeführt wird.

Von dort aus sollten Sie in der Lage sein, um es herauszufinden.

Können Sie in Ihrem Szenario die Anrufer Identität verkörpern? auf diese Weise Sie würde sogar entlang Beglaubigungsschreiben übergeben müssen, zB:

<authentication mode="Windows" />
<identity impersonate="true" />

in web.config von Server A. Aber das hängt natürlich von Ihrer Situation, da Sie nicht, dass für Server A. möchten Aber wenn Sie können dies Ihr Problem ohne benutzerdefinierten Code lösen könnten.

Hier ist ein Link zum Einrichten von Identitätswechsel: http: // msdn .microsoft.com / en-us / library / ms998351.aspx # paght000023_impersonatingorigcaller

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top