2012-10-12 12 views
7

Ich versuche, eine ASP.NET (.NET 3.5) -Website zu erstellen, um über Exchange-Webdienste eine Verbindung zu unserem Exchange 2010-Server herzustellen. Ich kann eine Verbindung zu EWS herstellen, wenn ich den Benutzernamen, das Kennwort und die Domäne festlege authentifizieren mit, aber ich möchte, wenn möglich, keine Login-Daten in meinem Code enthalten.AD Benutzerauthentifizierung

In IIS habe ich die integrierte Windows-Authentifizierung für die Website aktiviert, in web.config der Website habe ich <authentication mode="Windows"/>.

Der folgende Code ist, was ich mit worden woking:

svc.UseDefaultCredentials = True 
svc.Credentials = New WebCredentials() 
svc.Url = New Uri(svcURL) 

Mit dem obigen Code, den ich die Nachricht erhalte:

Wenn eine Anforderung als ein Konto zu machen, der nicht hat Mailbox, Sie müssen die primäre Mail-SMTP-Adresse für alle eindeutigen Ordner-IDs angeben.

Wenn ich versuche, svc.Credentials = CredentialCache.DefaultNetworkCredentials (anstelle von svc.Credentials = New WebCredentials()) mir die Fehlermeldung zu verwenden:

Kann nicht das Objekt des Typs ‚System.Net.SystemNetworkCredential‘ zu Typ ‚Microsoft.Exchange werfen .WebServices.Data.ExchangeCredentials '.

Wie bereits erwähnt, ist die einzige Sache, die gearbeitet hat, ist die Benutzerinformationen zu definieren, indem hartzucodieren Benutzer Login-Daten zur Authentifizierung an, die ich lieber nicht tun: svc.Credentials = New WebCredentials("username","password","domain")

Hat jemand in der Lage gewesen zu EWS zu authentifizieren die Anmeldeinformationen des aktuell angemeldeten Benutzers in einer ASP.NET-Website verwenden?

+0

Lima, wo Sie eine Lösung für dieses Szenario finden? –

Antwort

2

Standardmäßig ist es nicht möglich, die Anmeldeinformationen eines Benutzers von einem Server (dem Server, auf dem die ASP.NET-Site gehostet wird) an einen anderen (Ihren Exchange-Server) zu delegieren. Dies wird als "Server-Hop" bezeichnet und Windows wird dies standardmäßig als Sicherheitsmaßnahme verhindern.

Sie haben ein paar Optionen, um dieses Werk:

  1. Verwenden von Kerberos: Wenn Kerberos aktiviert ist es macht es möglich, Benutzer-Credentials zwischen Servern zu delegieren, wenn die Windows-Authentifizierung verwenden. Ich kenne die genauen Details zur Einrichtung von Kerberos nicht, da ich nur ein bescheidener Entwickler bin, aber vielleicht kann Ihnen Ihr Systemadministrator behilflich sein. AFAIK, Sie müssen Ihren ASP.NET-Server so einrichten, dass Benutzerdelegierung zulässig ist.
  2. Festlegen der Benutzeridentität Ihres IIS-Anwendungspools: Wenn Kerberos keine Option ist, können Sie die Identität des Anwendungspools ändern, unter dem Ihre ASP.NET-Site ausgeführt wird. Definieren Sie zuerst einen neuen Anwendungspool im IIS-Manager. Wechseln Sie dann zum Dialogfeld Erweiterte Einstellungen für diesen Anwendungspool und legen Sie die Identität für einen Domänenbenutzer fest, der auf Ihren Exchange-Server zugreifen darf. Weitere Informationen zur Identität des Anwendungspools finden Sie hier: http://technet.microsoft.com/en-us/library/cc771170(v=WS.10).aspx.
  3. Einstellen des < Identität > Element: Wenn Sie aus irgendeinem Grunde nicht den Anwendungspool ändern, Sie Identitätswechsel von ASP.NET-Website versuchen, die Identität < > Element in Ihrer web.config-Datei. ASP.NET bietet Ihnen die Möglichkeit, die Anmeldeinformationen in der Registrierung zu speichern, sodass Sie sie nicht direkt in Ihre Datei web.config einfügen müssen. Mehr Infos hier: http://msdn.microsoft.com/en-us/library/72wdk8cc(v=vs.90).aspx
  4. Mit dem < appSettings> ellement und Verschlüsselung: Die letzte Option, die ich von einfach denken kann als normale < appSettings die Anmeldeinformationen in der Datei web.config setzen> und dann die gesamte < appSettings verschlüsseln > Abschnitt. Sie würden dann einfach die appSettings aus Ihrem Code mit the AppSettingsReader class lesen. Mit .NET können Sie Abschnitte der Datei "web.config" sofort verschlüsseln, und Sie können die Einstellungen ohne Ereignis lesen, wenn Sie bemerken, dass der Abschnitt verschlüsselt ist. .NET kümmert sich um die Entschlüsselung für Sie. Weitere Informationen hier: http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx