Share via


Cómo utilizar un nombre de usuario personalizado y un validador de contraseñas

De forma predeterminada, cuando un nombre de usuario y la contraseña se utilizan para la autenticación, Windows Communication Foundation (WCF) utiliza Windows para validar el nombre de usuario y la contraseña. Sin embargo, WCF permite esquemas personalizados de autenticación de nombre de usuario y contraseña, también conocidos como validadores. Para incorporar un nombre de usuario personalizado y un validador de contraseña, cree una clase que derive de UserNamePasswordValidator y, a continuación, configúrela.

Para obtener una aplicación de ejemplo, consulte UserNamePassword Validator.

Para crear un nombre de usuario personalizado y un validador de contraseñas

  1. Cree una clase que derive de UserNamePasswordValidator.

  2. Implemente el esquema personalizado de autenticación invalidando el método Validate.

    No utilice el código en el ejemplo siguiente que invalida el método Validate en un entorno de producción. Reemplace el código con su nombre de usuario personalizado y esquema de validación de contraseña, que podrían implicar la recuperación de los pares de nombre de usuario y contraseña de una base de datos.

    Para devolver errores de autenticación al cliente, inicie una FaultException en el método Validate.

Cómo: Configurar un servicio para utilizar un nombre de usuario personalizado y un validador de contraseñas

  1. Configure un enlace que utilice la seguridad de mensaje sobre cualquier transporte o la seguridad del nivel de transporte sobre HTTP(S).

    Si utiliza la seguridad de mensaje, agregue uno de los enlaces proporcionados por el sistema, como wsHttpBinding Element, o bien un customBinding Element que admita la seguridad de mensaje y el tipo de credencial UserName.

    Si utiliza la seguridad del nivel de transporte sobre HTTP(S), agregue wsHttpBinding Element o <basicHttpBinding>, o bien un customBinding Element que utilice HTTP(S) y el esquema de autenticación Basic.

    Nota

    Si se utiliza .NET Framework versión 3.5 o una versión posterior, puede utilizarse un validador de nombre de usuario y contraseña personalizado con la seguridad de mensaje y de transporte. Con .NET Framework 3,0, sólo puede utilizarse un validador de nombre de usuario y contraseña con la seguridad de mensaje.

    1. En el archivo de configuración, en el elemento <system.ServiceModel>, agregue un elemento <bindings>.

    2. Agregue un elemento wsHttpBinding Element o <basicHttpBinding> a la sección de enlace. Para obtener más información acerca de la creación de un elemento de enlace WCF, vea Cómo: Especificar un enlace de servicio en la configuración.

    3. Establezca el atributo mode de security element of wsHttpBinding o <security> of <basicHttpBinding> como Message, Transport, or TransportWithMessageCredential.

    4. Establezca el atributo clientCredentialType de message element of wsHttpBinding o <transport> of <wsHttpBinding>.
      Si utiliza la seguridad de mensaje, establezca el atributo clientCredentialType de message element of wsHttpBinding como UserName.
      Si utiliza la seguridad de nivel de transporte sobre HTTP(S), establezca el atributo clientCredentialType de <transport> of <wsHttpBinding> o <transport> of <basicHttpBinding> como Basic.

      Nota

      Cuando un servicio WCF se hospeda en Internet Information Services (IIS) mediante la seguridad del nivel de transporte, y se establece la propiedad UserNamePasswordValidationMode como Custom, el esquema de autenticación personalizado utiliza un subconjunto de autenticación de Windows. Esto se debe a que en este escenario, IIS realiza la autenticación de Windows antes de que WCF invoque al autenticador personalizado.

    Para Para obtener más información acerca de que crea un elemento de enlace WCF, vea Cómo: Especificar un enlace de servicio en la configuración.

    El siguiente ejemplo muestra el código de configuración para el enlace.

    <system.serviceModel> 
      <bindings>
      <wsHttpBinding>
          <binding name="Binding1">
            <security mode="Message">
              <message clientCredentialType="UserName" />
            </security>
          </binding>        
        </wsHttpBinding>
      </bindings>
    </system.serviceModel>
    
  2. Configure un comportamiento que especifique que un nombre de usuario personalizado y el validador de contraseñas se utilizan para validar los pares de nombre de usuario y para los tokens de seguridad UserNameSecurityToken entrantes.

    1. Agregue un elemento secundario al elemento <system.serviceModel>, agregue un elemento <behaviors>.

    2. Agregue serviceBehaviors section al elemento <behaviors>.

    3. Agregue un elemento <behavior> y establezca el atributo name en un valor adecuado.

    4. Agregue <serviceCredentials> Element al elemento <behavior>.

    5. Agregue userNameAuthentication element a <serviceCredentials> Element.

    6. Establezca userNamePasswordValidationMode en Custom.

      Nota

      Si no se establece el valor userNamePasswordValidationMode, WCF utiliza la autenticación de Windows en lugar del nombre de usuario personalizado y validador de la contraseña.

    7. Establezca customUserNamePasswordValidatorType en el tipo que representa su nombre de usuario personalizado y el validador de la contraseña.

    El ejemplo siguiente muestra el fragmento <serviceCredentials> en este punto.

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

Ejemplo

El ejemplo de código siguiente muestra cómo crear un nombre de usuario personalizado y el validador de la contraseña. No utilice el código que invalida el método Validate en un entorno de producción. Reemplace el código con su nombre de usuario personalizado y esquema de validación de contraseña, que podrían implicar la recuperación de los pares de nombre de usuario y contraseña de una base de datos.

Consulte también

Tareas

Cómo: Utilizar el proveedor de suscripciones de ASP.NET

Referencia

UserNamePasswordValidator

Otros recursos

Autenticación