Share via


Gewusst wie: Verwenden eines benutzerdefinierten Benutzernamens und eines Kennwort-Validierungssteuerelements

Wenn ein Benutzername und ein Kennwort für die Authentifizierung verwendet werden, verwendet Windows Communication Foundation (WCF) standardmäßig Windows zum Überprüfen des Benutzernamens und des Kennworts. WCF ermöglich jedoch benutzerdefinierte Benutzernamen- und Kennwortauthentifizierungsschemas, die auch Validierungssteuerelemente genannt werden. Zum Verwenden eines benutzerdefinierten Benutzernamen- und Kennwort-Validierungssteuerelements erstellen und konfigurieren Sie eine Klasse, die sich von UserNamePasswordValidator ableitet.

Eine Beispielanwendung finden Sie unter UserNamePassword Validator.

So erstellen Sie ein benutzerdefiniertes Benutzernamen- und Kennwort-Validierungssteuerelement

  1. Erstellen Sie eine von der UserNamePasswordValidator-Klasse abgeleitete Klasse.

  2. Implementieren Sie ein benutzerdefiniertes Authentifizierungsschema, indem Sie die Validate-Methode außer Kraft setzen.

    Verwenden Sie nicht den Code des folgenden Beispiels, der die Validate-Methode in einer Produktionsumgebung außer Kraft setzt. Ersetzen Sie den Code mit dem benutzerdefinierten Benutzernamen- und Kennwort-Validierungsschema. Möglicherweise müssen der Benutzername und das zugehörige Kennwort aus einer Datenbank abgerufen werden.

    Um Authentifizierungsfehler an den Client zurückzugeben, lösen Sie in der Validate-Methode eine FaultException aus.

So konfigurieren Sie einen Dienst für das Verwenden eines benutzerdefinierten Benutzernamen- und Kennwort-Validierungssteuerelements

  1. Konfigurieren Sie eine Bindung, die Nachrichtensicherheit über jedes beliebige Transportprotokoll oder Sicherheit auf Transportebene über HTTP(S) verwendet.

    Bei Verwendung von Nachrichtensicherheit, fügen Sie eine der vom System bereitgestellten Bindungen hinzu, beispielsweise wsHttpBinding Element, oder ein customBinding Element, das Nachrichtensicherheit und den Anmeldeinformationstyp UserName unterstützt.

    Wenn Sie Sicherheit auf Transportebene über HTTP(S) verwenden, fügen Sie entweder das wsHttpBinding Element oder ein <basicHttpBinding> hinzu oder ein customBinding Element, das mit HTTP(S) und dem Authentifizierungsschema Basic arbeitet.

    Tipp

    Wenn Sie .NET Framework, Version 3.5 oder höher verwenden können Sie ein benutzerdefiniertes Benutzernamen- und Kennwort-Validierungssteuerelement mit Nachrichten- und Transportsicherheit nutzen. In Verbindung mit .NET Framework 3.0 kann ein benutzerdefiniertes Benutzername- und Kennwort-Validierungssteuerelement nur mit Nachrichtensicherheit verwendet werden.

    1. Fügen Sie in der Konfigurationsdatei unterhalb des <system.ServiceModel>-Elements ein <bindings>-Element ein.

    2. Fügen Sie dem Bindungsabschnitt ein wsHttpBinding Element-Element oder <basicHttpBinding>-Element hinzu. Weitere Informationen zum Erstellen eines WCF-Bindungselements finden Sie unter Gewusst wie: Angeben einer Dienstbindung in einer Konfiguration.

    3. Legen Sie das mode-Attribut für das security element of wsHttpBinding oder <security> of <basicHttpBinding> auf Message, Transport, or TransportWithMessageCredential fest.

    4. Legen Sie das clientCredentialType-Attribut des message element of wsHttpBinding oder des <transport> of <wsHttpBinding> fest.
      Bei Verwendung von Nachrichtensicherheit legen Sie das clientCredentialType-Attribute des message element of wsHttpBinding auf UserNamefest.
      Wenn Sicherheit auf Transportebene über HTTP(S) verwendet wird, legen Sie das clientCredentialType-Attribut des <transport> of <wsHttpBinding> oder <transport> of <basicHttpBinding> auf Basic fest.

      Tipp

      Wenn ein WCF-Dienst in Internet Information Services (IIS) unter Verwendung von Sicherheit auf Transportebene gehostet wird und die UserNamePasswordValidationMode-Eigenschaft auf Custom festgelegt ist, dann verwendet das benutzerdefinierte Authentifizierungsschema eine Teilmenge der Windows-Authentifizierung. Das liegt daran, dass IIS in diesem Szenario die Windows-Authentifizierung ausführt, bevor WCF den benutzerdefinierten Authentifizierer aufruft

    Weitere Informationen zum Erstellen eines WCF-Bindungselements finden Sie unter Gewusst wie: Angeben einer Dienstbindung in einer Konfiguration.

    Das folgende Beispiel zeigt den Konfigurationscode für die Bindung.

    <system.serviceModel> 
      <bindings>
      <wsHttpBinding>
          <binding name="Binding1">
            <security mode="Message">
              <message clientCredentialType="UserName" />
            </security>
          </binding>        
        </wsHttpBinding>
      </bindings>
    </system.serviceModel>
    
  2. Konfigurieren Sie ein Verhalten, das angibt, dass ein benutzerdefiniertes Benutzername- und Kennwort-Validierungssteuerelement verwendet wird, um Benutzernamen/Kennwort-Paare für eingehende UserNameSecurityToken-Sicherheitstoken zu überprüfen.

    1. Fügen Sie ein <system.serviceModel>-Element als untergeordnetes Element des <behaviors>-Elements hinzu.

    2. Fügen Sie dem <behaviors>-Element ein serviceBehaviors section-Element hinzu.

    3. Fügen Sie ein <behavior>-Element hinzu, und legen Sie das name-Attribut auf einen passenden Wert fest.

    4. Fügen Sie dem <behavior>-Element ein <serviceCredentials> Element-Element hinzu.

    5. Fügen Sie ein userNameAuthentication element zum <serviceCredentials> Element hinzu.

    6. Legen Sie den userNamePasswordValidationMode auf Custom fest.

      Tipp

      Wenn der userNamePasswordValidationMode-Wert nicht festgelegt wird, verwendet WCF die Windows-Authentifizierung anstatt des benutzerdefinierten Benutzernamen- und Kennwort-Validierungssteuerelements.

    7. Legen Sie den customUserNamePasswordValidatorType auf den Typ fest, der das benutzerdefinierte Benutzernamen- und Kennwort-Validierungssteuerelement darstellt.

    Im folgenden Beispiel sehen Sie das <serviceCredentials>-Fragment bis zu diesem Punkt:

    <serviceCredentials>
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Microsoft.ServiceModel.Samples.CalculatorService.CustomUserNameValidator, service" />
    </serviceCredentials>
    

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie ein benutzerdefiniertes Benutzernamen- und Kennwort-Validierungssteuerelement erstellt wird. Verwenden Sie nicht den Code, der die Validate-Methode in einer Produktionsumgebung außer Kraft setzt. Ersetzen Sie den Code mit dem benutzerdefinierten Benutzernamen- und Kennwort-Validierungsschema. Möglicherweise müssen der Benutzername und das zugehörige Kennwort aus einer Datenbank abgerufen werden.

Siehe auch

Aufgaben

Gewusst wie: Verwenden des ASP.NET-Mitgliedschaftsanbieters

Referenz

UserNamePasswordValidator

Weitere Ressourcen

Authentifizierung