Bonjour équipe JS API,
Je rencontre un problème où notre SSO applique des mesures de sécurité renforcées et efface intentionnellement `window.opener`.
Je travaille actuellement sur une intégration avec Octave (alias EAM) qui fournit un plugin ArcGIS. Leur application cliente suit l'exemple et la documentation fournis par Esri, mais en conséquence, l'intégration est actuellement cassée : l'authentification réussit, mais le rappel ne peut plus renvoyer la réponse OAuth à l'application parente car `window.opener` n'est pas disponible [1].
Je ne pense pas que EAM/Octave puisse vraiment être blâmé pour cela, car ils suivent le chemin le plus simple fourni par le SDK utilisant `oauth-callback-html` [1] référencé dans toute la documentation [2],[3].
Après avoir enquêté avec notre équipe de sécurité, j'ai constaté que cette situation n'est pas nécessairement spécifique à notre SSO. Les mécanismes d'isolation modernes des navigateurs tels que Cross-Origin-Opener-Policy (COOP) peuvent également rompre intentionnellement la relation popup/opener.
Il semble donc que le SDK pourrait être rendu plus robuste, et mieux aligné avec les pratiques de sécurité actuelles, en supportant également les environnements où window.opener n'est pas disponible.
Une alternative possible serait d'utiliser un BroadcastChannel de même origine entre la page de rappel et l'application comme solution de secours lorsque window.opener n'est pas disponible. Microsoft MSAL Browser, par exemple, utilise une approche similaire pour supporter l'authentification popup dans les environnements activés COOP [4].
Ce serait formidable si le flux de connexion popup OAuth pouvait être amélioré pour supporter de tels environnements. Les fournisseurs externes intégrant ArcGIS sont susceptibles de suivre les exemples officiels et pourraient autrement hériter de l'hypothèse que window.opener restera toujours disponible tout au long du flux d'authentification
Merci de votre écoute !
Référence :
[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
PS : J'ai un dossier ouvert (04242886) et ils m'ont recommandé d'ouvrir un post ici.