Bueno ya vimos en la parte 1 la descripción del laboratorio donde vamos a implementar nuestro nuevo Exchange Server autenticado contra el CAS de Apereo a través de ADFS.

Vamos a suponer que ya tienes un controlador de dominio operativo, en nuestro caso sobre el dominio OLIMPO y que además ya cuentas con al menos un Exchange Server 2019 en marcha, recuerda que en este laboratorio está integrado en el mismo servidor que el controlador de dominio, es decir, en exlab.olimpo.lab.

Configuración de la federación ADFS

La federación de mi laboratorio está desplegada sobre el servidor adfslab.olimpo.lab y tiene la configuración que se muestra en la siguiente captura. Realmente se trata de la configuración por defecto donde el único cambio reseñable es que la federación tiene como nombre http://fs.olimpo.lab simplemente para diferenciarla del nombre del servidor que la alberga.

image-20220317-exchange-adfs-apereo-cas-parte-2-img_1

Relaying Trust Parties

En nuestro caso se van a generar dos relaciones de relaciones de confianza, una para Outlook Web App (OWA) y la otra para Exchange Control Panel (ECP). A la primera le hemos puesto el nombre de “Outlook on the web” y a la segunda “Exchange Control Panel”.

Recuerda que estos son los únicos servicios de Exchange que se pueden federar ya que tanto EAS como Outlook deben autenticarse mediante Directorio Activo.

Outlook on the web

Como se puede observa la segunda relación de confianza es casi igual que la primera solo que para el ECP. En la siguiente captura se puede observar la configuración de los identificadores que solo es uno hacia la URL del OWA.

image-20220317-exchange-adfs-apereo-cas-parte-2-img_3

En esta captura se puede observar la configuración de los puntos finales. En realidad solo tenemos uno de tipo POST hacia la URL de OWA.

image-20220317-exchange-adfs-apereo-cas-parte-2-img_4

Exchange Control Panel

Como se puede observa la segunda relación de confianza es casi igual que la primera solo que para el ECP. En la siguiente captura se puede observar la configuración de los identificadores que en este caso también es solo uno hacia la URL del ECP.

image-20220317-exchange-adfs-apereo-cas-parte-2-img_5

En esta captura se puede observar la configuración de los puntos finales. Como en el primer caso solo tenemos uno de tipo POST hacia la URL del ECP.

image-20220317-exchange-adfs-apereo-cas-parte-2-img_6

Issuance Transform Rules

En las reglas de transformación de notificaciones tenemos dos reglas, una para el UPN y otra para obtener el PrimarySID mediante uan búsqueda en el repositorio de Directorio Activo. Ambas reglas son exactamente iguales en ambas relaciones de confianza por lo que solo las describiremos una vez.

image-20220317-exchange-adfs-apereo-cas-parte-2-img_2

Regla UPN

En esta primera regla simplemente obtenemos la notificación entrante NameIdentifier que es de tipo email (esto lo veremos cuando configuremos el CAS) y emito una nueva notificación de tipo UPN con el valor que me llega.

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"]
 => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn", Value = c.Value);

Es verdad que esto es bastante deficiente y estoy confiando en que me llegue la notificación con una dirección de correo valida y que coincida con el UPN del usuario en Directorio Activo pero recuerda que esto se trata de un laboratorio para aprender.

Regla PrimarySID

En esta segunda regla aprovechamos la notificació de tipo UPN recien creada para localizar el objectSID del usuario buscandolo por el UPN y por la dirección de correo electrónico por si no somos capaces de localizarlo por el UPN.

c1:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"]
 && c2:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"]
 => issue(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"), query = "(&(objectCategory=person)(objectClass=user)(|(userPrincipalName={0})(&(mail={0})(!(userPrincipalName={0})))));objectSid;OLIMPO\random", param = c2.Value);

Aquí nuevamente hacemos un poco de truco porque estamos forzando el dominio del usuario al del laboratorio pero no he sido capaz de hacerlo funcionar de otra manera.

Bueno y con esto nos despedimos hasta el siguiente episodio donde veremos la parte de los proveedores de confianza de notificaciones o Claims Providers Trusts.