Federación con un servicio AD FS de un cliente
En este artículo se describe cómo una aplicación SaaS multiinquilino puede admitir la autenticación mediante Servicios de federación de Active Directory (AD FS), para federarse con la instancia de AD FS de un cliente.
Escenario de federación
Azure Active Directory (Azure AD) facilita el inicio de sesión de los usuarios desde inquilinos de Azure AD, incluidos los clientes de Office 365 y Dynamics CRM Online. Pero, ¿qué sucede con los clientes que usan instalaciones locales de Active Directory en una intranet corporativa?
Una de las opciones consiste en que estos clientes sincronicen su instalación local de AD con Azure AD mediante Azure AD Connect. Sin embargo, algunos clientes quizás no puedan usar este método debido a la directiva de TI corporativa u otras razones. En ese caso, otra opción es federar mediante los Servicios de federación de Active Directory (AD FS).
Para habilitar este escenario:
- El cliente debe tener una granja de servidores de ADFS con conexión a Internet.
- El proveedor de SaaS implementa su propia granja de servidores de AD FS.
- El cliente y el proveedor de SaaS deben configurar la confianza de federación. Se trata de un proceso manual.
Hay tres roles principales en la relación de confianza:
El servicio AD FS del cliente es el asociado de cuentas, responsable de autenticar los usuarios del directorio AD del cliente y de crear los tokens de seguridad con las notificaciones de usuario.
El servicio AD FS del proveedor de SaaS es el asociado de recursos, que confía en el asociado de cuentas y recibe las notificaciones de usuario.
La aplicación se configura como un usuario de confianza (RP) en el servicio AD FS del proveedor de SaaS.

Nota
En este artículo se da por hecho que la aplicación usa OpenID Connect como protocolo de autenticación. Otra opción es usar WS-Federation.
Para OpenID Connect, el proveedor de SaaS debe usar AD FS 2016, que se ejecuta en Windows Server 2016. AD FS 3.0 no admite OpenID Connect.
Para obtener un ejemplo del uso de WS-Federation con ASP.NET 4, consulte el ejemplo active-directory-dotnet-webapp-wsfederation.
<a name="authentication-flow">Flujo de autenticación
- Cuando el usuario hace clic en "iniciar sesión", la aplicación se redirige a un punto de conexión de OpenID Connect en el servicio AD FS del proveedor de SaaS.
- El usuario escribe su nombre de usuario de la organización ("
alice@corp.contoso.com"). AD FS usa la detección del dominio de inicio para redirigir al servicio AD FS del cliente, donde el usuario escribe sus credenciales. - El servicio AD FS del cliente envían notificaciones de usuario al servicio AD FS del proveedor de SaaS, mediante WF-Federation (o SAML).
- Las notificaciones se dirigen desde AD FS a la aplicación mediante OpenID Connect. Esto requiere una transición de protocolo desde WS-Federation.
Limitaciones
De forma predeterminada, la aplicación de usuario de confianza recibe solo un conjunto fijo de notificaciones disponibles en id_token, que se muestra en la tabla siguiente. Con AD FS 2016, puede personalizar el valor de id_token en escenarios de OpenID Connect. Para obtener más información, vea Tokens de identificador personalizado en AD FS.
| Notificación | Descripción |
|---|---|
| aud | Audiencia. La aplicación para que la que se emitieron las notificaciones. |
| authenticationinstant | Instante de autenticación. La hora en que se produjo la autenticación. |
| c_hash | Valor de código hash. Se trata de un valor hash del contenido del token. |
| exp | Fecha de expiración. El momento después del cual el token ya no se aceptará. |
| iat | Emitido a las. La hora a la que se generó el token. |
| iss | Emisor. El valor de esta notificación siempre es el servicio AD FS del asociado de recursos. |
| name | Nombre de usuario. Ejemplo: john@corp.fabrikam.com |
| nameidentifier | Identificador de nombre. El identificador para el nombre de la entidad para la que se emitió el token. |
| valor de seguridad | Nonce de sesión. Un valor único generado por AD FS para ayudar a evitar ataques de reproducción. |
| upn | Nombre principal de usuario (UPN). Ejemplo: john@corp.fabrikam.com |
| pwd_exp | Período de expiración de contraseña. El número de segundos hasta que caduca la contraseña del usuario o un secreto de autenticación similar, como un PIN. |
Nota
La notificación "iss" contiene el AD FS del asociado (esta notificación normalmente identificará al proveedor de SaaS como emisor). No identifica el AD FS del cliente. Puede encontrar el dominio del cliente como parte de UPN.
El resto de este artículo describe cómo configurar la relación de confianza entre el usuario de confianza (la aplicación) y el asociado de cuentas (el cliente).
Implementación de AD FS
El proveedor de SaaS puede implementar AD FS en el entorno local o en máquinas virtuales de Azure. Por motivos de seguridad y disponibilidad, son importantes las siguientes directrices:
- Implemente al menos dos servidores de AD FS y dos servidores proxy de AD FS para lograr la mejor disponibilidad del servicio AD FS.
- Los controladores de dominio y los servidores de AD FS nunca deben exponerse directamente a Internet y deben estar en una red virtual con acceso directo a ellos.
- Se deben usar servidores proxy de aplicación web (antes, servidores proxy de AD FS) para publicar servidores de AD FS en Internet.
Para configurar una topología similar en Azure, es necesario usar redes virtuales, grupos de seguridad de red, máquinas virtuales y conjuntos de disponibilidad. Para más información, consulte Directrices para implementar Windows Server Active Directory en Azure Virtual Machines.
Configuración de la autenticación de OpenID Connect con AD FS
El proveedor de SaaS debe habilitar OpenID Connect entre la aplicación y AD FS. Para ello, agregue un grupo de aplicaciones a AD FS. Encontrará instrucciones detalladas en esta entrada de blog, en "Configuración de una aplicación web para el inicio de sesión de OpenId Connect en AD FS".
Después, configure el middleware de OpenID Connect. El punto de conexión de metadatos es https://domain/adfs/.well-known/openid-configuration, donde domain es el dominio del servicio AD FS del proveedor de SaaS.
Normalmente se puede combinar con otros puntos de conexión de OpenID Connect (como Azure AD). Necesitará dos botones de inicio de sesión diferentes o alguna otra forma de distinguirlos, para enviar al usuario al punto de conexión de autenticación correcto.
Configuración del asociado de recursos de AD FS
El proveedor de SaaS debe hacer lo siguiente para cada cliente que quiera conectarse mediante AD FS:
- Agregar confianza para el proveedor de notificaciones.
- Agregar reglas de notificaciones.
- Habilitar la detección del dominio principal.
Estos son los pasos con más detalle.
Adición de confianza para el proveedor de notificaciones
- En el Administrador del servidor, haga clic en Herramientas y, luego, seleccione Administración de AD FS.
- En el árbol de consola, bajo AD FS, haga clic con el botón derecho en Confianzas de proveedores de notificaciones. Seleccione Agregar confianza de proveedor de notificaciones.
- Haga clic en Iniciar para iniciar el asistente.
- Seleccione la opción "Importar datos acerca del proveedor de notificaciones publicado en línea o en una red local". Escriba el identificador URI del punto de conexión de metadatos de federación del cliente. (Ejemplo:
https://contoso.com/FederationMetadata/2007-06/FederationMetadata.xml). Tendrá que obtenerlo del cliente. - Complete el asistente usando las opciones predeterminadas.
Edición de reglas de notificaciones
- Haga clic con el botón derecho en la confianza de proveedor de notificaciones recién agregada y seleccione Editar reglas de notificaciones.
- Haga clic en Agregar regla.
- Seleccione "Pasar a través o filtrar una notificación entrante" y haga clic en Siguiente.

- Escriba un nombre para la regla.
- En "Tipo de notificación entrante", seleccione UPN.
- Seleccione "Pasar todos los valores de notificación".

- Haga clic en Finalizar
- Repita los pasos 2 a 7 y especifique Tipo de delimitador de notificación para el tipo de notificación entrante.
- Haga clic en Aceptar para completar el asistente.
<a name="enable-home-realm-discovery">Habilitación de la detección del dominio principal
Ejecute el siguiente script de PowerShell:
Set-AdfsClaimsProviderTrust -TargetName "name" -OrganizationalAccountSuffix @("suffix")
donde "name" es el nombre descriptivo de la confianza de proveedor de notificaciones, y "suffix" es el sufijo UPN del directorio AD del cliente (ejemplo, "corp.fabrikam.com").
Con esta configuración, los usuarios finales pueden escribir sus cuentas de la organización y AD FS selecciona automáticamente el proveedor de notificaciones correspondiente. Consulte Personalizar las páginas de inicio de sesión de AD FS, en la sección "Configuración del proveedor de identidades para utilizar ciertos sufijos de correo electrónico".
Configuración del asociado de cuentas de AD FS
Los usuarios deben hacer lo siguiente:
- Agregar una confianza para usuario de confianza.
- Agregar reglas de notificaciones.
Adición de confianzas para usuarios de confianza
- En el Administrador del servidor, haga clic en Herramientas y, luego, seleccione Administración de AD FS.
- En el árbol de consola, bajo AD FS, haga clic con el botón derecho en Veracidades de usuarios de confianza. Seleccione Agregar confianza para usuario de confianza.
- Seleccione Compatible con notificaciones y haga clic en Iniciar.
- En la página Seleccionar origen de datos , seleccione la opción "Importar datos acerca del proveedor de notificaciones publicado en línea o en una red local". Escriba el identificador URI del punto de conexión de metadatos de federación del proveedor de SaaS.

- En la página Especificar nombre para mostrar , escriba cualquier nombre.
- En la página Elegir la directiva de control de acceso , elija una directiva. Puede dar permiso a todos los usuarios de la organización o elegir un grupo de seguridad específico.

- Escriba los parámetros necesarios en el cuadro Directiva.
- Haga clic en Siguiente para completar el asistente.
Adición de reglas de notificaciones
Haga clic con el botón derecho en la confianza para usuario de confianza recién agregada y seleccione Editar directiva de emisión de notificación.
Haga clic en Agregar regla.
Seleccione "Enviar atributos LDAP como notificaciones" y haga clic en Siguiente.
Escriba un nombre para la regla, por ejemplo, “UPN”.
En el almacén de atributos, seleccione Active Directory.

En la sección Asignación de atributos LDAP :
- En Atributo LDAP, seleccione User-Principal-Name.
- En Tipo de notificación saliente, seleccione UPN.

Haga clic en Finalizar
Haga clic en Agregar regla de nuevo.
Seleccione “Enviar notificaciones con una regla personalizada” y haga clic en No.
Escriba un nombre para la regla, por ejemplo, "Delimitar tipo de notificación".
En Regla personalizada, escriba lo siguiente:
EXISTS([Type == "http://schemas.microsoft.com/ws/2014/01/identity/claims/anchorclaimtype"])=> issue (Type = "http://schemas.microsoft.com/ws/2014/01/identity/claims/anchorclaimtype", Value = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn");Esta regla emite una notificación de tipo
anchorclaimtype. La notificación indica al usuario de confianza que use el UPN como identificador inmutable del usuario.Haga clic en Finalizar
Haga clic en Aceptar para completar el asistente.