Title: Web Services Enhancements WSE 2'0 for Microsoft 'NET
1Web Services Enhancements (WSE) 2.0 for Microsoft
.NET
2Agenda
- Mensajes SOAP
- Técnicas de seguridad existentes para Web
- WS-Security
- Username Token
- X509 Token
- Autorización y Autenticación
- Firmando mensajes
- Encriptando mensajes
- WS-Policy
- Configurando archivos de polÃticas
- Especificaciones Soportadas
3Mensaje SOAP
- ltsoapEnvelope xmlnssoaphttp//schemas.xml ...
- ltsoapHeadergt
- lt!Optional header information. -- gt
- ltusernamegtChristianlt/usernamegt
- ltpasswordgtMyPwdlt/passwordgt
- lt/soapHeadergt
- ltsoapBodygt
- lt! -- Message goes here. -- gt
- lt/soapbodygt
- lt/soapEnvelopegt
4Que es WSE?
- Add-in que extiende el soporte existente en el
Framework de .NET para aprovechar nuevas
especificaciones del estándar de Web services - WS-
- WS-Security
- WS-Addressing
- WS-Policy
- WSE No garantiza que va a ser compatible con la
siguiente version de WSE, pero si garantiza
ejecucion side by side
5Tecnicas para conversaciones seguras en Web
6Desventajas de las técnicas de seguridad
existentes para Web
- SSL funciona a nivel del protocolo de transporte
- Provee encripcion sólida de punto a punto y
autenticación - No permite que un mensaje pueda ser examinado por
servicios intermedios - No permite enviar mensajes por firewalls que
dejan pasar trafico por el puerto 80 - Si los mensajes se deben enviar a través de
varios puntos una nueva conexión SSL se debe
realizar en cada punto - Costosas operaciones criptográficas deben
realizarse cada por cada nueva conexión SLL
7WS-Security
- Seguridad basada en mensajes
8WS-Security
- Solo se firma o encripta partes del mensaje en
lugar del mensaje completo - Intermediarios pueden ver partes del mensaje que
son especÃficos para ellos - Intermediarios puede aportar nuevos encabezados
al mensaje para efectos de bitácora o auditoria - El mensaje puede ser enviado a través de
diferentes protocolos de transporte HTTP, SMTP,
FTP y TCP
9WS-Security - Cómo funciona?
- WS-Security brinda mecanismos para lograr
- Integridad del mensaje
- Usando firmas digitales para asegurar que el
mensaje no fue cambiado - Confidencialidad
- Encripcion XML para asegurar que solo quien debe
recibir el mensaje puede entenderlo - Autenticación y Autorización
- Identificación de quien envÃa el mensaje y que
derechos tiene para realizar operaciones
10WS-Security - Autenticación
- Username Token
- Permiete representar las credenciales de un
usuario de la forma nombre de usuario/
Contraseña - Las credenciales de un usuario se envian en la
clase UsernameToken - Se agregan al mensaje SOAP usando
- ProxyWSE.RequestSoapContext.Security.Tokens.Add(
- new UsernameToken(Christian,
- MyPass, PasswordOption.SendPlainText))
11WS-Security Requiriendo Autenticación desde el
servicio
- Desde el servicio se obtiene una referencia al
contexto utilizado - RequestSoapContext.Current
- A través del contexto se verifican los tokens que
existen dentro de la sección Security usando - SoapContext context RequestSoapContext.Current
- context.Security.Tokens
- Dentro del contexto se verifica que exista al
menos un token de tipo UsernameToken
12WS-Security - Autorización
- La clase UsernameToken contiene la función
IsInRole() que es utilizada para verificar desde
el Web service si un usuario pertenece a un
determinado rol - UsernameToken tokcontext.Security.Tokens0
- tok.Principal.IsInRole()
13WS-Security - Autorizacion
14WS-Security Autorizacion con usuarios que no
son de Windows
- Crear una clase derivada de UsernameTokenManager
- Sobrescribir el método AutenticateToken()
- Asginar al Token un GenericPrincipal
- Asignar al GenericPrincipal un GenericIdentity
con los roles del usuario según el usuario que
esta en la propiedad Token.Username - Registrar la clase derivada con el Namespace
http//docs.oasis-open.org/wss/2004/01/oasis-20040
1-wss-wssecurity-secext-1.0.xsd - Registrar la clase derivada con el QName
wsseUsernameToken - Usando un UsernameTokenManager ahora se puede
enviar el password usando SendHashed
15WS-Security Firmando los mensajes con un
UsernameToken
- Crear un token de llave derivada usando el token
de tipo Username - DerivedKeyToken dk new DerivedKeyToken(new
UsernameToken()) - Agregar el nuevo token a la coleccion de tokens
- proxy.RequestSoapContext.Security.Tokens.Add(dk)
- Crear una firma de mensaje usando la llave
derivada en una nueva instancia de la clase
MessageSignature y agregarla a la coleccion de
elementos del mensaje - proxy.RequestSoapContext.Security.Elements.Add(new
MessageSignature(dk)) -
16WS-Security Requiriendo una firma desde el
servicio
- Acceder la colección de elementos en la sección
de Security del Contexto usando la interfase
ISecurityElement - context.Security.Elements
- Validar que al menos un elemento en la colección
sea de tipo MessageSignature
17WS-Security Encriptando los mensajes con un
UsernameToken
- Crear una instancia de la clase EncryptedData
basada en el UsernameToken - Agregar desde el proxy a la colección de
elementos de seguridad la nueva instancia de
EncryptedData - proxy.RequestSoapContext.Security.Elements
- .Add(new EncryptedData(login.Token))
18WS-Security Requiriendo encripción desde el
servicio
- Acceder la colección de elementos en la sección
de Security del Contexto usando la interfase
ISecurityElement - context.Security.Elements
- Validar que al menos un elemento en la colección
sea de tipo EncryptedData
19Firmando los mensajes con un Certificado Digital
- Crear un token de tipo X509SecurityToken usando
un certificado digital - X509CertificateStore store
X509CertificateStore.CurrentUserStore(storeId)
store.OpenRead() - X509CertificateCollection certs
store.FindCertificateByKeyIdentifier(
Convert.FromBase64String(keyId)) - store.Close()
- X509SecurityToken tokX509SecurityToken(((X509Cert
ificate)certs0))
20WSE 2.0- Especificaciones soportadas
21Resumen
- Mensajes SOAP
- Técnicas de seguridad existentes para Web
- WS-Security
- Username Token
- X509 Token
- Autorización y Autenticación
- Firmando mensajes
- Encriptando mensajes
- WS-Policy
- Configurando archivos de polÃticas
- Especificaciones Soportadas