WIF: Custom Security Token Handler

Siempre que uno se pone a jugar con WIF, en general con el concepto de “authentication outsourcing”,  se encuentra con que la mayoría de ejemplos son los sencillos, utilizando autenticación Windows. Sin embargo, en la mayoría de las aplicaciones que construímos, los mecanismos de autenticación ( porque los exponemos por internet o bien porque no tenemos un AD a nuestra disposición con todo el repositorio de usuarios ) suelen diferir de estos. Como en mi correo, el uso de una autenticación “custom” con WIF suele ser una pregunta habitual, me he decidido por poner esta entrada intentando mostrar los pasos necesarios para realizarla. Lógicamente, asumiremos que el lector ya tiene los conocimientos básicos sobre WIF y la situación de las distintas piezas en un escenario básico.

 

Aunque en un principio pudiera parecer que el objetivo a la hora de securizar un STE por medio de una autenticación personalizada pudiera pasar por la configuración del binding del mismo, por otra parte tal y como hacemos en los servicios wcf tradicionales, la realidad es que la integración de WIF con WCF y los hooks de esta API sobre la extensibilidad nos permiten modificar la autenticación en esta pieza, el STE, haciendo uso de los SecurityTokenHandlers y las subclases de esta. La configuración por defecto en la plantilla de STE es seguridad basada en el mensaje con credenciales Windows, por lo tanto usando el WindowsUserNameSecurityTokenHandler. Si quisiéramos cambiar este mecanismo, y por ejemplo, incluir una validación personalizada de usuario/contraseña solamente tendríamos que realizar las siguientes tareas.

  • Modificar el binding del STE para establecer el tipo de credenciales a UserName

  • Crear un CustomUserNameSecurityTokenHandler como sigue:

  • Configurar dentro del STE la inclusión de este token handler

Con estos tres pasos básicos ya tenemos nuestro STS funcionando con autenticación personalizada, espero que a alguno le sea de utilidad…

 

Saludos

Unai