Pasos para delegar la autenticación de mi sitio web a ADFS

Este post es parte de una serie de artículos complementarios a la VAN sobre Identity Providers.

El siguiente artículo trata de sitios web desarrollados con ASP.NET (WebForms, MVC, etc)

Pre-requisitos:

  • Disponer de una instancia de ADFS donde delegar la autenticación.
  • Tener instalado WIF SDK en el ambiente de desarrollo.

Pasos:

  1. Abrir nuestro proyecto web en Visual Studio.
  2. Sobre el proyecto, hacemos clic derecho y elegimos la opción: “Add STS reference” que tendremos disponible si hemos instalado WIF SDK. Esto nos abre la pantalla de Federation Utility donde debemos completar los datos de la aplicación:integrando-adfs-1_thumb[3]
  3. En el siguiente paso, elegimos la opción “Use an existing STS” e indicamos la url de la FederationMetadata de dicho ADFS.integrando-adfs-2_thumb[1]
  4. El resto de los valores los aceptamos por defecto.

Cambios realizados

Esto va a haber realizado varios cambios en nuestra aplicación, cambios que si no tenemos instalado WIF SDK los tendríamos que hacer manualmente. Ahora vamos a analizar dichos cambios.

  • Agregó un archivo FederationMetadata.xml con la información necesaria para agregar el Relying Party en ADFS con un simple Import y sin necesidad de configurarlo manualmente.
  • Agregó, en el web.config, varias líneas, y quizás modificó otras, principalmente:
    • agregó la sección: microsoft.identityModel con toda la configuración referente WIF.
    • denegó el ingreso para personas no autenticadas: <authorization><deny users="?" /></authorization>
    • configuró el modo de autenticación en none: <authentication mode="None" />
    • Agregó 2 HttpModules: WSFederationAuthenticationModule y SessionAuthenticationModule. Nota: si ejecutás en IIS 7 y tenés un error 500, probá de quitar los httpModules definidos en system.web.

Deploy, problemas comunes y posibles soluciones

Ahora estamos en condiciones de hacer el deploy de nuestra aplicación a un IIS, esto es necesario para manejar los certificados, puede ser un IIS local o en un servidor, en mi caso va a ser en el servidor ya que no tengo un IIS local en la máquina de desarrollo.

Si accedemos al sitio en este momento y no teníamos la misma configurada con https (SSL)probablemente tengamos el siguiente error: “ID1059: Cannot authenticate the user because the URL scheme is not https and requireSsl is set to true in the configuration, therefore the authentication cookie will not be sent. Change the URL scheme to https or set requireSsl to false on the cookieHandler element in configuration.”. Para esto, lo mejor va a ser utilizar https y así también subir el nivel de seguridad de nuestra aplicación por lo que, en nuestro ambiente de desarrollo, creamos un certificado firmado por nosotros mismos y configuramos el Binding del IIS en https con el certificado que acabamos de crear.

Si ahora accedemos al sitio, probablemente nos pida autenticarnos y luego nos de un error, esto se debe a que aun no configuramos la aplicación en ADFS. Esto lo podemos confirmar abriendo el EventViewer del servidor donde está instalado ADFS y, en la rama de ADFS/Admin vamos a encontrar un error que dice algo de: “MSIS7007: The requested relying party trust 'https://aplicacionweb.neluz.int/' is unspecified or unsupported”. Para agregar la aplicación a ADFS abrimos la consola de administración de ADFS y en “Trust Relationships” / “Relying Party Trust” vamos a “Add Relying Party Trust…” y seleccionamos la FederationMetadata.xml que habíamos creado con “Federation Utility”

integrando-adfs-4_thumb[2]

Luego de completar el wizard vamos a “Edit Claims Rules” donde creamos, al menos una regla como la siguiente:

integrando-adfs-5_thumb[2] integrando-adfs-6_thumb[2]

Guardamos y volvemos a ingresar a nuestro sitio.

Ahora podemos obtener un mensaje como: “A potentially dangerous Request.Form value was detected from the client (wresult="<t:RequestSecurityTo...").”. Si esto ocurre debemos agregar en nuestro web.config el siguiente tag “<httpRuntime requestValidationMode="2.0"/>” dentro de “<system.web>”.

Ahora si nuestra aplicación debería autenticar con ADFS.

En mi caso, la aplicación es muy simple y, en Default.aspx tiene una línea que dice:

<%= HttpContext.Current.Request.IsAuthenticated ? HttpContext.Current.User.Identity.Name : "El usuario no está autenticado" %>

por lo que al ingresar al sitio primero me pide que me autentique y luego se ve como la siguiente imagen:

integrando-adfs-7_thumb[1]

Seguir leyendo otros artículos de la serie

2 comentarios:

  1. disculpen, utilizo Visual Studio 2015 y necesito modificar una aplicacion para inicio de sesion ADFS, intenté descargar el WIF SDK e instalarlo pero no he tenido exito, espero me puedan ayudar. Saludos.

    ResponderBorrar