Verwenden von mehreren Authentifizierungsschemen mit WCFUsing Multiple Authentication Schemes with WCF

Mit WCF können Sie nun mehrere Authentifizierungsschemas für einen einzelnen Endpunkt angeben.WCF now allows you to specify multiple authentication schemes on a single endpoint. Darüber hinaus können webgehostete Dienste ihre Authentifizierungseinstellungen direkt von IIS erben.Furthermore web hosted services can inherit their authentication settings directly from IIS. Selbst gehostete Dienste können angeben, welche Authentifizierungsschemas verwendet werden können.Self-hosted services can specify what authentication schemes can be used. Weitere Informationen zum Einrichten der Authentifizierungseinstellungen in IIS finden Sie unter IIS-AuthentifizierungFor more information about setting authentication settings in IIS, see IIS Authentication

IIS-gehostete DiensteIIS-Hosted Services

Legen Sie für IIS-gehostete Dienste die Authentifizierungsschemas fest, die Sie in IIS verwenden möchten.For IIS-hosted services, set the authentication schemes you wish to use in IIS. Geben Sie dann in der Datei "Web.config" des Diensts, in der Bindungskonfiguration ClientCredential-Typ als "InheritedFromHost" wie im folgenden XML-Ausschnitt gezeigt:Then in your service’s web.config file, in your binding configuration specify clientCredential type as "InheritedFromHost" as shown in the following XML snippet:

<bindings>  
      <basicHttpBinding>  
        <binding name="secureBinding">  
          <security mode="Transport">  
            <transport clientCredentialType="InheritedFromHost" />  
          </security>  
        </binding>  
      </basicHttpBinding>  
    </bindings>  

Sie können angeben, dass nur eine Teilmenge der Authentifizierungsschemas mit Ihrem Dienst mithilfe von "serviceauthenticationbehavior" verwendet werden soll oder die <ServiceAuthenticationManager >-Element.You can specify that you only want a subset of authentication schemes to be used with your service using the ServiceAuthenticationBehavior or the <serviceAuthenticationManager> element. Beim Konfigurieren im Code verwenden Sie ServiceAuthenticationBehavior wie im folgenden Codeausschnitt dargestellt.When configuring this in code use the ServiceAuthenticationBehavior as shown in the following code snippet.

// ...  
ServiceAuthenticationBehavior sab = null;  
sab = serviceHost.Description.Behaviors.Find<ServiceAuthenticationBehavior>();  

if (sab == null)  
{  
    sab = new ServiceAuthenticationBehavior();  
    sab.AuthenticationSchemes = AuthenticationSchemes.Basic | AuthenticationSchemes.Negotiate | AuthenticationSchemes.Digest;  
    serviceHost.Description.Behaviors.Add(sab);  
}  
else  
{  
     sab.AuthenticationSchemes = AuthenticationSchemes.Basic | AuthenticationSchemes.Negotiate | AuthenticationSchemes.Digest;  
}  
// ...  

Wenn Sie dies in einer Konfigurationsdatei konfigurieren, verwenden die <ServiceAuthenticationManager >-Element wie im folgenden XML-Ausschnitt gezeigt.When configuring this in a config file, use the <serviceAuthenticationManager> element as shown in the following XML snippet.

<behaviors>  
      <serviceBehaviors>  
        <behavior name="limitedAuthBehavior">  
          <serviceAuthenticationManager authenticationSchemes="Negotiate, Digest, Basic"/>  
          <!-- ... -->  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  

Dadurch wird sichergestellt, dass nur eine Teilmenge der hier aufgeführten Authentifizierungsschemas für den Dienstendpunkt infrage kommt, je nachdem, was in IIS ausgewählt wurde.This will ensure that only a subset of the authentication schemes listed here will be considered for applying on the service endpoint, depending on what is selected in the IIS. Dies bedeutet, dass ein Entwickler z. B. die Standardauthentifizierung aus der Liste ausschließen kann, indem er sie in der serviceAuthenticationManager-Liste auslässt. Sie wird auch nicht auf den Dienstendpunkt angewendet, wenn sie in IIS aktiviert ist.This means that a developer can exclude say Basic auth from the list by omitting it from the serviceAuthenticationManager listing and even if it is enabled in IIS, it will not be applied on the service endpoint

Selbst gehostete DiensteSelf-Hosted Services

Selbst gehostete Dienste werden geringfügig anders konfiguriert, da keine Einstellungen von IIS geerbt werden können.Self-hosted services are configured a bit differently since there is no IIS to inherit settings from. Hier verwenden Sie die <ServiceAuthenticationManager >-Element oder "serviceauthenticationbehavior", um die Authentifizierungseinstellungen anzugeben, die vererbt werden.Here you use the <serviceAuthenticationManager> element or ServiceAuthenticationBehavior to specify the authentication settings that will be inherited. Der Code sieht folgendermaßen aus:In code it looks like this:

// ...  
ServiceAuthenticationBehavior sab = null;  
sab = serviceHost.Description.Behaviors.Find<ServiceAuthenticationBehavior>();  

if (sab == null)  
{  
    sab = new ServiceAuthenticationBehavior();  
    sab.AuthenticationSchemes = AuthenticationSchemes.Basic | AuthenticationSchemes.Negotiate | AuthenticationSchemes.Digest;  
    serviceHost.Description.Behaviors.Add(sab);  
}  
else  
{  
     sab.AuthenticationSchemes = AuthenticationSchemes.Basic | AuthenticationSchemes.Negotiate | AuthenticationSchemes.Digest;  
}  
// ...  

In der config-Datei sieht das wie folgt aus:In config, it looks like this:

<behaviors>  
      <serviceBehaviors>  
        <behavior name="limitedAuthBehavior">  
          <serviceAuthenticationManager authenticationSchemes="Negotiate, Digest, Basic"/>  
          <!-- ... -->  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  

Außerdem können Sie InheritFromHost in den Bindungseinstellungen angeben, wie im folgenden XML-Ausschnitt gezeigt.And then you can specify InheritFromHost in your binding settings as shown in the following XML snippet.

<bindings>  
      <basicHttpBinding>  
        <binding name="secureBinding">  
          <security mode="Transport">  
            <transport clientCredentialType="InheritedFromHost" />  
          </security>  
        </binding>  
      </basicHttpBinding>  
    </bindings>  

Alternativ können Sie die Authentifizierungsschemas in einer benutzerdefinierten Bindung angeben, indem Sie die Authentifizierungsschemas für das HTTP-Transportbindungselement festlegen, wie im folgenden Konfigurationsausschnitt dargestellt.Alternatively, you can specify the authentication schemes in a custom binding, by setting the authentication schemes on the HTTP transport binding element, as shown in the following config snippet.

<binding name="multipleBinding">  
      <textMessageEncoding/>  
      <httpTransport authenticationScheme="Negotiate, Ntlm, Digest, Basic" />  
    </binding>  

Siehe auchSee Also

Bindungen und SicherheitBindings and Security
Endpunkte: Adressen, Bindungen und VerträgeEndpoints: Addresses, Bindings, and Contracts
Konfigurieren der vom System bereitgestellten BindungenConfiguring System-Provided Bindings
Sicherheitsfunktionen mit benutzerdefinierten BindungenSecurity Capabilities with Custom Bindings
BindungenBindings
BindungenBindings
Benutzerdefinierte BindungenCustom Bindings