Hola equipo de JS API,
Estoy enfrentando un problema donde nuestro SSO aplica medidas de seguridad reforzadas y borra intencionalmente `window.opener`.
Actualmente estoy trabajando en una integración con Octave (también conocido como EAM) que proporciona un Plugin de ArcGIS. Su aplicación cliente sigue el ejemplo y la documentación proporcionada por Esri, pero como consecuencia la integración está actualmente rota: la autenticación tiene éxito, sin embargo el callback ya no puede devolver la respuesta OAuth a la aplicación principal porque `window.opener` no está disponible [1].
No creo que realmente se pueda culpar a EAM/Octave por esto, ya que están siguiendo el camino más directo proporcionado por el SDK usando `oauth-callback-html` [1] referenciado a lo largo de la documentación [2],[3].
Después de investigar esto con nuestro equipo de seguridad, descubrí que esta situación no es necesariamente específica de nuestro SSO. Mecanismos modernos de aislamiento del navegador como Cross-Origin-Opener-Policy (COOP) también pueden romper intencionalmente la relación popup/opener.
Por lo tanto, parece que el SDK podría hacerse más robusto y mejor alineado con las prácticas actuales de seguridad, apoyando también entornos donde window.opener no está disponible.
Una posible alternativa sería usar un BroadcastChannel del mismo origen entre la página de callback y la aplicación como respaldo cuando window.opener no esté disponible. Microsoft MSAL Browser, por ejemplo, usa un enfoque similar para soportar autenticación en ventanas emergentes en entornos habilitados para COOP [4].
Sería genial si el flujo de inicio de sesión emergente OAuth pudiera mejorarse para soportar tales entornos. Los proveedores externos que integran con ArcGIS probablemente seguirán los ejemplos oficiales y podrían asumir erróneamente que window.opener siempre estará disponible durante todo el flujo de autenticación.
¡Gracias por escuchar!
Referencia:
[1]
https://github.com/Esri/jsapi-resources/blob/main/oauth/oauth-callback.html
[2]
https://developers.arcgis.com/javascript/latest/references/core/identity/OAuthInfo/#popup
[3]
https://developers.arcgis.com/javascript/latest/sample-code/identity-oauth-basic/
[4]
https://learn.microsoft.com/en-us/entra/msal/javascript/browser/login-user
PD: Tengo un caso abierto (04242886) y me recomendaron abrir una publicación aquí.