Hallo JS API-team,
Ik ondervind een probleem waarbij onze SSO versterkte beveiligingsmaatregelen toepast en opzettelijk `window.opener` wist.
Ik werk momenteel aan een integratie met Octave (ook bekend als EAM) die een ArcGIS Plugin levert. Hun clientapplicatie volgt het voorbeeld en de documentatie van Esri, maar als gevolg hiervan is de integratie momenteel kapot: authenticatie slaagt, maar de callback kan de OAuth-respons niet meer teruggeven aan de ouderapplicatie omdat `window.opener` niet beschikbaar is [1].
Ik denk niet dat EAM/Octave hier echt de schuld van kan krijgen, aangezien zij het meest directe pad volgen dat door de SDK wordt geboden met `oauth-callback-html` [1] die door de documentatie heen wordt genoemd [2],[3].
Na onderzoek met ons beveiligingsteam ontdekte ik dat deze situatie niet per se specifiek is voor onze SSO. Moderne browserisolatiemechanismen zoals Cross-Origin-Opener-Policy (COOP) kunnen ook opzettelijk de popup/opener-relatie verbreken.
Het lijkt er daarom op dat de SDK robuuster gemaakt kan worden en beter afgestemd op huidige beveiligingspraktijken, door ook omgevingen te ondersteunen waar window.opener niet beschikbaar is.
Een mogelijke alternatieve oplossing zou zijn om een same-origin BroadcastChannel te gebruiken tussen de callback-pagina en de applicatie als fallback wanneer window.opener niet beschikbaar is. Microsoft MSAL Browser gebruikt bijvoorbeeld een vergelijkbare aanpak om popup-authenticatie te ondersteunen in COOP-ingeschakelde omgevingen [4].
Het zou geweldig zijn als de OAuth-popup login flow verbeterd kan worden om dergelijke omgevingen te ondersteunen. Externe leveranciers die integreren met ArcGIS zullen waarschijnlijk de officiële voorbeelden volgen en anders aannemen dat window.opener altijd beschikbaar blijft gedurende de authenticatiestroom.
Bedankt voor het luisteren!
Referentie:
[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: Ik heb een case geopend (04242886) en ze hebben me aangeraden hier een bericht te plaatsen.