Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Invalidación de la identidad de un servicio para la autenticación

Normalmente, no tiene que establecer la identidad en un servicio porque la selección de un tipo de credencial de cliente dicta el tipo de identidad expuesto en los metadatos del servicio. Por ejemplo, el código de configuración siguiente utiliza el elemento <wsHttpBinding>clientCredentialType y establece el atributo a Windows.


<configuration>
<system.serviceModel>
  <bindings>
    <wsHttpBinding>
      <binding name="WSHttpBinding_Windows">
        <security mode="Message">
          <message clientCredentialType="Windows"
                   establishSecurityContext="false"/>
        </security>
      </binding>
    </wsHttpBinding>
  </bindings>
  <!-- other configuration code not shown -->
</system.serviceModel>
</configuration>


El fragmento siguiente de Lenguaje de descripción de servicios Web (WSDL) muestra la identidad para el extremo previamente definido. En este ejemplo, el servicio se ejecuta como un servicio hospedado por sí mismo bajo una cuenta de usuario determinada (username@contoso.com) y, por consiguiente, la identidad del nombre principal del usuario (UPN) contiene el nombre de cuenta. El UPN también se conoce como el nombre de inicio de sesión de usuario en un dominio de Windows.


<wsdl:service name="CalculatorService">
  <wsdl:port name="WSHttpBinding_ICalculator_Windows"
    binding="tns:WSHttpBinding_ICalculator_Windows">
    <soap12:address 
      location=
      "http://localhost:8003/servicemodelsamples/service/upnidentity" />
    <wsa10:EndpointReference>
      <wsa10:Address>
        http://localhost:8003/servicemodelsamples/service/upnidentity
      </wsa10:Address>
      <Identity  
        xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
        <Upn>username@contoso.com</Upn>
      </Identity>
    </wsa10:EndpointReference>
  </wsdl:port>
</wsdl:service>


Para ver una aplicación de ejemplo que muestra la configuración de identidad, vea Ejemplo de identidad de servicio. Para obtener más información sobre la identidad del servicio, vea Identidad del servicio y autenticación.

De forma predeterminada, cuando un servicio se configura para usar una credencial de Windows, se genera un elemento <identity><userPrincipalName><servicePrincipalName> o en el WSDL. Si el servicio se ejecuta bajo la cuenta LocalSystem, LocalService o NetworkService, se genera de forma predeterminada un nombre principal de servicio (SPN) con el formato host/<hostname> porque esas cuentas tienen acceso a los datos SPN del equipo. Si el servicio se ejecuta con una cuenta diferente, Windows Communication Foundation (WCF) genera un UPN con el formato <username>@<domainName>. Esto ocurre porque la autenticación Kerberos requiere que se proporcione un UPN o SPN al cliente para autenticar el servicio.

También puede utilizar la herramienta Setspn.exe para registrar un SPN adicional con la cuenta de un servicio en un dominio. Puede utilizar a continuación el SPN como la identidad del servicio. Para descargar la herramienta, vea Herramienta del kit de recursos de Windows 2000: Setspn.exe. Para obtener más información sobre la herramienta, vea Información general de Setspn.

Nota Nota

Para usar el tipo de credencial de Windows sin negociación, la cuenta de usuario del servicio debe tener acceso al nombre de entidad de seguridad de servicio (SPN) registrado en el dominio de Active Directory. Puede hacer esto de varias formas:

  • Use la cuenta NetworkService o LocalSystem para ejecutar el servicio. Dado que esas cuentas tienen acceso al SPN del equipo que se establece cuando el equipo se une al dominio de Active Directory, WCF genera automáticamente el elemento SPN apropiado dentro del extremo del servicio en los metadatos del servicio (WSDL).

  • Utilice una cuenta de dominio aleatoria de Active Directory para ejecutar el servicio. En este caso, establezca un SPN para esa cuenta de dominio, lo cual puede llevar a cabo utilizando la herramienta de utilidad Setspn.exe. Una vez creado el SPN para la cuenta del servicio, configure WCF para publicar ese SPN a los clientes del servicio a través de sus metadatos (WSDL). Para ello, hay que establecer la identidad del extremo para el extremo expuesto, ya sea mediante un archivo de configuración de la aplicación o el código.

Para obtener más información sobre los SPN, el protocolo Kerberos y Active Directory, consulte Kerberos Technical Supplement for Windows.

Bb628618.collapse_all(es-es,VS.110).gifCuando SPN o UPN es igual a la cadena vacía

Si establece el SPN o el UPN igual a una cadena vacía, pueden ocurrir varias cosas diferentes, según el nivel de seguridad y modo de autenticación que se use:

  • Si está usando la seguridad de nivel de transporte, se elige la autenticación NT LanMan (NTLM).

  • Si usa la seguridad de nivel de mensaje, se puede producir un error en la autenticación, en función del modo de autenticación:

  • Si usa el modo spnego y el atributo AllowNtlm está establecido en false, se produce un error de autenticación.

  • Si usa el modo spnego y el atributo AllowNtlm está establecido en true, se produce un error de autenticación si el UPN está vacío, pero se realiza correctamente si el SPN está vacío.

  • Si usa Kerberos directo (también conocido como "de una vez"), se produce un error de autenticación.

Bb628618.collapse_all(es-es,VS.110).gifUso del elemento <identity> en la configuración

Si se cambia el tipo de credencial de cliente del enlace mostrado anteriormente a Certificate, el WSDL generado contiene un certificado X.509 serializado en Base64 para el valor de identidad, como se muestra en el código siguiente. Éste es el valor predeterminado para todos los tipos de credencial de cliente excepto Windows.


<Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
 <X509Data>
 <X509Certificate>MIIBxjCCAXSgAwIBAgIQmXJgyu9tro1M98GifjtuoDAJBgUrDgMCHQUAMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MB4XDTA2MDUxNzIxNDQyNVoXDTM5MTIzMTIzNTk1OVowKTEQMA4GA1UEChMHQ29udG9zbzEVMBMGA1UEAxMMaWRlbnRpdHkuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBmivcb8hYbh11hqVoDuB7zmJ2y230f/b4e+4P6yXtKKuhUdYcIqc8mAforIM4WWJEVGeJVq9sFEwqrL5Ryid8jMTRwPLvA/x/wvj1gtD1GWJ+aUh2pqieiGL7MWTepHAQBIibUxgOrAOz0j9Xhg0iDFYScdYUjeqI3yZIDC7WbwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBADB/J2QjdSPL8Doj3pAveCXd/5fY03eo9kUym/Tmb4ubdqsObri0qnYR/n8Wxsa1yJ4Dks6cNBTPS4l5B7zUeNo=</X509Certificate> 
 </X509Data>
</KeyInfo>
</Identity>


Puede cambiar el valor de la identidad del servicio predeterminada o cambiar el tipo de la identidad mediante el elemento <identity> en la configuración o estableciendo la identidad en código. El código de configuración siguiente establece una identidad del sistema de nombres de dominio (DNS) con el valor contoso.com.

Bb628618.collapse_all(es-es,VS.110).gifEstablecimiento mediante programación de la identidad

Su servicio no tiene que especificar explícitamente una identidad, porque WCF lo determina automáticamente. Sin embargo, WCF le permite especificar una identidad en un extremo, si se requiere. El código siguiente agrega un nuevo extremo de servicio con una identidad de DNS concreta.


ServiceEndpoint ep = myServiceHost.AddServiceEndpoint(
                typeof(ICalculator),
                new WSHttpBinding(),
                String.Empty);
EndpointAddress myEndpointAdd = new EndpointAddress(new Uri("http://localhost:8088/calc"),
     EndpointIdentity.CreateDnsIdentity("contoso.com"));
ep.Address = myEndpointAdd;


Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft