Cómo: Configurar un servicio web XML para autenticación de Windows
Este tema es específico de una tecnología heredada. Ahora, los servicios Web XML y los clientes de servicios Web XML deben crearse con Windows Communication Foundation.
Code Example
Siga estos procedimientos para configurar y pasar las credenciales del cliente a un servicio Web usando todos los formularios de autenticación de Windows excepto Credenciales de cliente. En ese caso, siga los procedimientos en la sección Autenticación mediante certificados de cliente.
Para configurar un servicio Web para la autenticación de Windows
Configure el servicio Web para usar la autenticación de Windows con IIS.
IIS le permite especificar la seguridad a nivel de directorio o de archivo. Si desea especificar la seguridad para un servicio Web en una base por archivo, establezca los permisos para el servicio Web en el archivo .asmx en IIS. El archivo .asmx es el punto de entrada en el servicio Web. Para obtener más información, consulte la documentación de IIS.
Modifique el archivo de configuración para especificar la autenticación de Windows.
Establezca el atributo mode del elemento XML authentication en el archivo de configuración en "Windows". El ejemplo de código siguiente modifica un archivo de configuración para usar la autenticación de Windows.
// Fragment of a Web.config file. <authentication mode= "Windows"> </authentication>
Para pasar las credenciales de cliente a un servicio Web mediante la autenticación de Windows
Cree una nueva instancia de la clase de proxy al servicio Web. Si no se ha generado una clase de proxy, consulte Crear un proxy de servicio web XML para obtener información
Cree una nueva instancia de la clase NetworkCredential, estableciendo las propiedades UserName, Password y Domain.
Cree una nueva instancia de CredentialCache.
Agregue NetworkCredential a CredentialCache con el método Add de CredentialCache
Asigne la instancia de CredentialCache a la propiedad Credentials de la clase de proxy.
Si se usa la autenticación integrada de Windows, a continuación debe establecer la propiedad Credentials en System.Net.CredentialCache.DefaultCredentials.
Cuando la propiedad Credentials se establece en DefaultCredentials, el cliente negocia con el servidor si se va a usar la autenticación Kerberos y/o NTLM según la configuración del servidor.
El ejemplo de código siguiente establece las credenciales de cliente pasadas a un método de servicio Web mediante la autenticación de Windows.
Autenticación de certificados de cliente
Siga estos procedimientos para configurar y pasar las credenciales del cliente a un servicio Web el formulario de Credenciales de cliente de la autenticación de Windows.
Para configurar un servicio Web para la autenticación mediante certificados de cliente
La lista siguiente contiene información general de cómo configurar IIS para autenticar clientes mediante certificados de cliente. Para obtener más información, consulte la documentación de IIS.
Instale SSL.
Configure la aplicación web para aceptar certificados de cliente.
Modifique el archivo de configuración para especificar la autenticación de Windows para el servicio Web.
Establezca el atributo mode del elemento XML authentication en el archivo de configuración en "Windows". El ejemplo de código siguiente modifica un archivo de configuración para usar la autenticación de Windows.
// Fragment of a Web.config file. <authentication mode= "Windows"> </authentication>
Para pasar las credenciales de cliente a un servicio Web mediante la autenticación de certificados de cliente
Cree una nueva instancia de la clase de proxy al servicio Web. Si no se ha generado una clase de proxy, consulte Crear un proxy de servicio web XML para obtener información.
Cree una nueva instancia de X509Certificate.
Invoque el método CreateFromCertFile para cargar el certificado de cliente desde un archivo.
Un cliente puede obtener un archivo de certificado de cliente de una entidad emisora de certificados de confianza. Para obtener más información, consulte la documentación de IIS.
Agregue X509Certificate a la colección de ClientCertificates ClientCertificates de la clase de proxy.
El ejemplo de código siguiente muestra cómo un cliente de servicios Web pasa sus credenciales usando un certificado de cliente. Un certificado de cliente emitido desde el servidor web se carga de un archivo con el método CreateFromCertFile y, a continuación, se agrega a la propiedad ClientCertificates de la clase de proxy.
' Instantiate proxy class to a Bank Web service. Dim bank As BankSession = new BankSession() ' Load the client certificate from a file. Dim x509 As X509Certificate = X509Certificate.CreateFromCertFile("c:\user.cer") ' Add the client certificate to the ClientCertificates property ' of the proxy class. bank.ClientCertificates.Add(x509) ' Call the method on the proxy class, which requires authentication ' using client certificates. bank.Deposit(500)
// Instantiate proxy class to a Bank Web service. BankSession bank = new BankSession(); // Load the client certificate from a file. X509Certificate x509 = X509Certificate.CreateFromCertFile(@"c:\user.cer"); // Add the client certificate to the ClientCertificates property // of the proxy class. bank.ClientCertificates.Add(x509); // Call the method on the proxy class, which requires // authentication using client certificates. bank.Deposit(500);
Ejemplo
Cuando la propiedad Credentials se establece en System.Net.CredentialCache.DefaultCredentials el cliente negocia con el servidor hacer la autenticación basada en Kerberos y/o NTLM según como se configure el servidor.
El ejemplo de código siguiente establece las credenciales de cliente pasadas a un método de servicio Web mediante la autenticación de Windows.
Imports System
Imports System.Web.Services.Protocols
Imports System.Net
Imports MyMath
Public Class Calculator
Public Shared Sub Main()
' Create a new instance of the proxy class to an
' Web service method.
Dim mathproxy As MyMath.Math = New MyMath.Math()
' Create a new instance of CredentialCache.
Dim mycredentialCache As CredentialCache = New CredentialCache()
' Create a new instance of NetworkCredential using the client
' credentials.
Dim credentials As NetworkCredential = New _ NetworkCredential(UserName,SecurelyStoredPasword,Domain)
' Add the NetworkCredential to the CredentialCache.
mycredentialCache.Add(New Uri(mathproxy.Url), "Basic", _ credentials)
' Add the CredentialCache to the proxy class credentials.
mathproxy.Credentials = mycredentialCache
' Call the method on the proxy class.
Dim result As Integer
result = mathproxy.Add(3,5)
End Sub
End Class
using System;
using System.Web.Services.Protocols;
using System.Net;
using MyMath;
public class Calculator
{
public static void Main()
{
// Create a new instance of the proxy class to an XML
// Web service method.
MyMath.Math math = new MyMath.Math();
// Create a new instance of CredentialCache.
CredentialCache credentialCache = new CredentialCache();
// Create a new instance of NetworkCredential using the client
// credentials.
NetworkCredential credentials = new
NetworkCredential(UserName,SecurelyStroredPassword,Domain);
// Add the NetworkCredential to the CredentialCache.
credentialCache.Add(new Uri(math.Url), "Basic", credentials);
// Add the CredentialCache to the proxy class credentials.
math.Credentials = credentialCache;
// Call the method on the proxy class.
int result = math.Add(3,5);
}
}
Vea también
Tareas
Cómo: Realizar autenticación personalizada con encabezados SOAP
Referencia
NetworkCredential
CredentialCache
X509Certificate
Conceptos
Proteger servicios web XML creados con ASP.NET
Otros recursos
ASP.NET Web Application Security
Servicios web XML con ASP.NET