Authentifizierung mit dem HTTP-Channel

Dieses Thema bezieht sich auf eine veraltete Technologie, die zum Zwecke der Abwärtskompatibilität mit vorhandenen Anwendungen beibehalten wird und nicht für die neue Entwicklung empfohlen wird. Verteilte Anwendungen sollten jetzt mit  Windows Communication Foundation (WCF) entwickelt werden.

Zum Authentifizieren von Remoteaufrufen beim HttpChannel-Channel muss das Remoteobjekt unter Internetinformationsdiensten (IIS) gehostet werden.

Serverkonfiguration

Die gesamte Authentifizierungskonfiguration auf dem Server erfolgt durch IIS. Es gibt keine Serverauthentifizierungseinstellungen, die sich auf die Authentifizierung für HttpChannel beziehen. Weitere Informationen über IIS und die Konfiguration der Authentifizierung finden Sie unter IIS Authentication.

Clientkonfiguration

Beim Aufrufen eines unter IIS gehosteten und zur Authentifizierung konfigurierten Remoteobjekts muss der Client Anmeldeinformationen angeben. Legen Sie die useDefaultCredentials-Eigenschaft auf true fest, um die Anmeldeinformationen, unter denen die Clientanwendung ausgeführt wird, automatisch zu senden:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.remoting>
    <application>
      <channels>
        <channel ref="http" useDefaultCredentials="true"/>
      </channels>
      <client>
        <wellknown 
           url="http://MyServer/IISSec/MyRemoteObj.rem"
           type="Shared.MyRemoteObj, Shared"/>
      </client>
    </application>
  </system.runtime.remoting>
</configuration>

Wie im folgenden Code gezeigt, können Sie eine alternative Gruppe von Anmeldungen programmgesteuert angeben.

MyRemoteObj obj = new MyRemoteObj();
// Get the current set of channel sink properties
IDictionary props = ChannelServices.GetChannelSinkProperties(obj);
// Set domain, username, and password properties
props["domain"] = "SomeDomain";
props["username"] = "SomeUser";
props["password"] = "SomePassword123";
Console.WriteLine(obj.SayHello());

Alternativ können Sie die credentials-Eigenschaft, in der Sie eine Klasse, die die ICredentials-Schnittstelle implementiert, programmgesteuert festlegen. Erstellen Sie zuerst eine Klasse, die die ICredentials-Schnittstelle implementiert.

namespace MyCredentialsLib
{
    public class MyCredentials : ICredentials
    {
        public NetworkCredential GetCredential(Uri uri, string authType)
        {
            Console.WriteLine("MyCredentials.GetCredential() called");
            NetworkCredential newCred = new NetworkCredential("SomeRemotingUser", "SomePassword");
            return newCred;
        }
    }
} 

Wie im folgenden Code gezeigt, müssen Sie im Client anschließend eine Instanz der Klasse erstellen, die ICredentials implementiert, und die credentials-Eigenschaft auf diese Instanz festlegen.

RemotingConfiguration.Configure("client.exe.config", false);
MyRemoteObj obj = new MyRemoteObj();
IDictionary props = ChannelServices.GetChannelSinkProperties(obj);
MyCredentials credentials = new MyCredentials();
props["credentials"] = credentials;
Console.WriteLine(obj.SayHello()); 
36tfwzb0.note(de-de,VS.100).gifHinweis:
Es ist nicht empfehlenswert, Anmeldeinformationen in einer Anwendung fest zu programmieren. Diese Codierung erfolgt hier nur zu Illustrationszwecken.

Die useAuthenticatedConnectionSharing-Eigenschaft gibt an, dass der Serverchannel authentifizierte Verbindungen wiederverwendet, anstatt jeden eingehenden Aufruf zu authentifizieren. Diese Eigenschaft ist standardmäßig auf true festgelegt, wenn useDefaultCredentials auf true festgelegt ist. Diese Eigenschaft kann in einer Konfigurationsdatei (innerhalb des <channel>-Elements) oder programmgesteuert (genau wie die username-Eigenschaft und die password-Eigenschaft im vorhergehenden Beispielcode) festgelegt werden.

Die unsafeAuthenticatedConnectionSharing-Eigenschaft gibt an, dass der Client seine eigenen Anmeldeinformationen und seinen eigenen Verbindungsgruppennamen bereitstellt, die der Server zum Erstellen einer authentifizierten Verbindungsgruppe verwendet. Wenn diese Einstellung auf true festgelegt ist, muss die connectionGroupName-Eigenschaft auf einen einzelnen authentifizierten Benutzer festgelegt werden. Diese Eigenschaft wird ignoriert, wenn die useAuthenticatedConnectionSharing-Eigenschaft auf true festgelegt ist.

Siehe auch

Konzepte

Authentifizierung mit dem TCP-Channel
Authentifizierung mit dem IPC-Channel
Verschlüsselung und Nachrichtenintegrität