¿Transporte o Menaje? Bien, según el escenario, aunque ahora no hablaré de ello (quizás otro post). Ante la posibilidad de implantación de servicios desarrollados con WCF, se presentan varios escenarios dónde la utilización de los mismo vienen, sino determinada, sí influenciada por su política de seguridad.
Modos de seguridad hay 5 [None, Transport, Message, Both, TransportWithMessageCredentials, TransportCredential Only], si quereis ampliar información mirar aqui.
Message Security with Username Client
Ante este contexto explicaré tres posible modos de autenticación UserName. Primeramente saber que en los tres modos de autenticación en el Servidor debe existir un certificado X509 para que el cliente pueda constatar la autenticidad del servicio. Si quereis más info de como crearlo mirar aqui.
En el intercambio inicial desde una llamada del cliente los datos en formato binario son trasportados mediante la especificación WS-Trust (véase TLS Negotiation). Una vez el servicio ha sido autenticado se establece un contexto de seguridad compartido [Shared security context].
Los mensajes, por defecto, están encriptados y firmados (véase ProtectionLevel ) y són transportados bajo dicho contexto de seguridad. La peculiaridad de este escenario és que el cliente es autenticado mediante un User y un Password. El tipo de enlace es wsHttpBinding, el transporte HTTP.
Modos de Autenticación:
* Utilizando autenticación por Windows: El tipo de credencial por UserName requiere de un valor User y otro Password que se deberán especificar a la hora de llamar desde el cliente mediante la propiedad clienteproxy.ClientCredentials.UserName.User o Password. Bajo el escenario en que nos encontramos, si no se especifica el tipo concreto de autenticación será, por defecto, autenticación Windows. Es decir que si en la llamada pasamos en User algo tal que 'Dominio\Usuario' con el respectivo password, la autenticación, con el permiso del controlador de dominio, se validará.
* Utilizando autenticación MemberShip: Pues como si se tratara de un site en ASP.NET podemos utilizar la misma funcionalidad. De entrada se me ocurre como ideal si se va a consumir por Internet y/o se va a utilizar la misma autenticación de nuestra site web o Intranet. Sin embargo, debemos indicar en el comportamiento del servicio (ServiceBehaviors\Behavior\ServiceCredentials) del archivo de configuración el tag siguiente:
[userNameAuthentication="MembershipProvider" membershipProviderName="SqlMembershipProvider"]
En este punto los valores que debemos pasar como User y Password són los que tenemos asignados dentro de Membership. Un buen documento que profundiza más es el siguiente.
* Otro escenario, quizás algo menos útil [aparentemente, opinión personal], pero mucho más flexible es mediante la autenticación parametrizada o customizada. Esto es, añadiendo una clase a nuestro Proyecto Servicio, que herede de UserNamePasswordValidator y sobreescribiendo (override) el método Validate, cuyos parámetros son user y password del tipo string, podremos manipularlos de la forma que queramos. Para ello el tag a añadir es:
[usernameauthentication="Custom" membershipProviderName="mypoject.myservice.CustomUserNameValidator, Project1"]
Dónde indicamos la clase que manejará la autenticación (CustomUserNameValidator), que hereda de UserNamePasswordValidator, y que está en el ensamblado (proyecto) Project1.
Ejemplo:
public class CustomUserNameValidator : UserNamePasswordValidator {
public override void Validate(string userName, string password) {
if (userName != "miusuario" password != "mipwd") {
throw new SecurityTokenException("Usuario/Contraseña incorrecta");
}
}
}
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario