Si todavía está utilizando un servicio web ASP.NET SOAP, la forma más sencilla que se ajusta a sus necesidades IMO es utilizar la autenticación de formularios ASP.NET con un DB de membresía. Si está empezando de nuevo, le recomiendo ir con WCF. Si no puede/no va a hacer eso, esta publicación se aplica a los servicios web ASP.NET SOAP "clásicos".
Para añadir autenticación de formularios a un servicio web:
Configurar al igual que lo haría con cualquier otro sitio web, pero la pusieron para permitir el acceso para todo el mundo:
<authorization>
<allow users="*"/>
</authorization>
Implemente los métodos de inicio de sesión/cierre de sesión y emita el ticket de autenticación en el método de inicio de sesión. Las solicitudes posteriores al servicio web pueden usar el ticket de autenticación emitido.
Todos los otros métodos web que desea proteger a continuación, puede decorar con
[PrincipalPermission (SecurityAction.Demand, autenticados = true)]
Estos métodos ahora lanzará una excepción de seguridad si un cliente no está autenticado
Ejemplo de un método protegido:
[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
[WebMethod(Description = "Your protected method")]
public string Foo()
{
return "bar";
}
Ejemplo de método de ingreso:
[WebMethod(Description = "Login to start a session")]
public bool Login(string userName, string password)
{
if (!Membership.Provider.ValidateUser(userName, password))
return false;
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
userName,
DateTime.Now,
DateTime.Now.AddMinutes(500),
false,
FormsAuthentication.FormsCookiePath);// Path cookie valid for
// Encrypt the cookie using the machine key for secure transport
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, // Name of auth cookie
hash); // Hashed ticket
// Set the cookie's expiration time to the tickets expiration time
if (ticket.IsPersistent)
cookie.Expires = ticket.Expiration;
// Add the cookie to the list for outgoing response
if(HttpContext.Current !=null)
HttpContext.Current.Response.Cookies.Add(cookie);
FormsAuthentication.SetAuthCookie(userName, true);
return true;
}
+1, pero desafortunadamente, estoy limitado a ASP.NET con framework 2.0, entonces no WCF. –
Operaciones, estoy perdido en ese caso, entiendo que la comunicación en el nivel de transporte se puede hacer también con certificados X509. Tal vez el proceso de validación contra SQL Server será más 'manual'. De todos modos, puede encontrar más información en: http://msdn.microsoft.com/en-us/library/ms996415.aspx – IoChaos