studio - Autenticación HTTP básica personalizada para servicios web ASP.NET en.NET 3.5/VS 2008
crear y consumir web service wcf c# (3)
Si está considerando WCF, puede usar la seguridad de usernameOverTransport para basicHttpBinding. es decir, el nombre de usuario y passowrd residen en el encabezado SOAP de la solicitud y todo el tráfico está protegido mediante encriptación SSL a través del cable.
Un validador UserNamePasswordValidator personalizado se puede utilizar para autenticar las credenciales entrantes contra, por ejemplo, la base de datos.
Puede establecer el principal del subproceso dentro de una IAuthorizationPolicy personalizada en el comportamiento del servicio.
Por ejemplo, evaluar la implementación del método para IAuthorizationPolicy para establecer el principal actual
public bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
Object obj;
if( evaluationContext.Properties.TryGetValue( "Identities", out obj ))
{
// get the authenticated identity
IIdentity client = (obj as IList<IIdentity>)[0];
evaluationContext.Properties["Principal"] = ... // create principal obj here for the identity
// this will set thread''s current principal
}
return true;
}
Estoy refaccionando una aplicación web ASP.NET en funcionamiento para exponer la interfaz de servicios web mediante el servicio web ASP.NET. De acuerdo con la autenticación de servicios web: mejores prácticas , la autenticación básica sobre https es el camino a seguir. Supongamos que lo es, a diferencia de hacer WS-Security, X509, etc.
En .NET 3.5 / VS 2008, ¿cuál es la forma más sencilla de implementar autenticación básica HTTP personalizada (cuenta que no es de Windows), por ejemplo, aceptando solo si el nombre de usuario es "foo" y la contraseña es "barra". En definitiva, me gustaría configurar Thread.CurrentPrincipal
.
¿Escribo mi propio HttpModule
o puedo hacerlo de forma más simple?
Tome el valor del encabezado Authorization
, analícelo y valide el nombre de usuario / contraseña.
El valor es username: password, codificado como una cadena Base64.
Ver http://en.wikipedia.org/wiki/Basic_access_authentication para más detalles.
Editar : si desea hacer esto para cada solicitud, usando el esquema de autenticación personalizado, entonces sería más fácil escribir un HttpModule
para manejar el análisis del encabezado y establecer el principal del subproceso.
Probablemente usar Custom Basic Authentication for IIS , escrito por Dominick Baier es el camino a seguir. Como él señala, los nombres de usuario de WCF 3.5 sobre la seguridad del transporte no se pueden usar en el servicio alojado en IIS, aunque mi pregunta era sobre los servicios web ASP.NET y no sobre WCF.
Hay otra implementación de Módulo HTTP llamada autenticación básica en ASP.NET contra fuente de datos personalizada por Santosh Sahoo .
Aunque no es lo que quería, encontré la muestra SOAP Headers de QuickStart Tutorial como una solución informativa. Enviar la contraseña en texto plano a través de http es claramente inseguro, pero este ejemplo podría ampliarse para agregar más seguridad, por ejemplo, ejecutarse en https o enviar hash de "contraseña + GUID de una sola vez + marca de tiempo".