Olá equipe JS API,
Estou enfrentando um problema onde nosso SSO aplica medidas de segurança reforçadas e intencionalmente limpa `window.opener`.
Atualmente estou trabalhando em uma integração com Octave (também conhecido como EAM) que fornece um Plugin ArcGIS. A aplicação cliente deles segue o exemplo e a documentação fornecida pela Esri, mas como consequência a integração está atualmente quebrada: a autenticação é bem-sucedida, porém o callback não consegue mais retornar a resposta OAuth para a aplicação pai porque `window.opener` não está disponível [1].
Não acho que o EAM/Octave possa realmente ser culpado por isso, pois eles estão seguindo o caminho mais direto fornecido pelo SDK usando `oauth-callback-html` [1] referenciado em toda a documentação [2],[3].
Após investigar isso com nossa equipe de segurança, descobri que essa situação não é necessariamente específica do nosso SSO. Mecanismos modernos de isolamento de navegador como Cross-Origin-Opener-Policy (COOP) também podem intencionalmente romper a relação popup/opener.
Portanto, parece que o SDK poderia ser tornado mais robusto e melhor alinhado com as práticas atuais de segurança, também suportando ambientes onde window.opener não está disponível.
Uma possível alternativa seria usar um BroadcastChannel de mesma origem entre a página de callback e a aplicação como fallback quando window.opener não estiver disponível. O Microsoft MSAL Browser, por exemplo, usa uma abordagem similar para suportar autenticação popup em ambientes habilitados para COOP [4].
Seria ótimo se o fluxo de login popup OAuth pudesse ser aprimorado para suportar tais ambientes. Fornecedores externos integrando com ArcGIS provavelmente seguirão os exemplos oficiais e podem assumir que window.opener sempre estará disponível durante todo o fluxo de autenticação.
Obrigado por ouvir!
Referência:
[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: Tenho um caso aberto (04242886) e me recomendaram abrir um post aqui.