大使访问 AzureAD 的 CORS 问题

CORS issue with Ambassador accessing AzureAD

我有:
一个 WebApp (ReactJs),一个 Api (Spring-Boot) 每个 运行 pod in Kubernetes 和一个 Ambassador 围绕这些(WebApp 和 Api 具有相同的域),我的身份提供者是 蔚蓝广告。 在 Azure AD 中,我为我的 WebApp 配置了一个 Web-redirect URI。

我的问题:
第一次访问 WebApp 会将我定向到 Microsoft 登录屏幕,在输入我的凭据后,我会被重定向到我的 WebApp。当我打开带有我的 WebApp 的浏览器选项卡时,不要使用它 1/1,5 小时然后返回并单击我的 WebApp 中的一个按钮(这会触发对我的 API 的调用)我得到这个 CORS 错误:

Access to XMLHttpRequest at 
'https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/authorize?client_id={clientId}&redirect_uri={ambassador-redirectUri}&response_type=code&scope=openid&state={state}'
(redirected from 'https://mydomainname/api/webapp/people') from origin 'https://mydomainname' 
has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource

显然我的访问令牌已过期,我的应用程序试图联系身份提供商以获取新的身份提供商,但我的 Idp 不允许这样做。

我按照以下步骤使用 Azure AD 设置 Ambassador:https://www.getambassador.io/docs/edge-stack/latest/howtos/sso/azure/ 但似乎我错过了什么。有人知道它可能是什么吗?

您最初体验的通过 https://login.microsoftonline.com 页面的登录流程之所以有效,只是因为您要访问的 URL(即您的 WebApp 的 URL)位于浏览器的地址栏,因此用于将页面加载到浏览器选项卡中。

您不能为 XMLHttpRequest 重复相同的登录流程,因为它没有地址栏和浏览器选项卡。即使允许重定向,您的 WebApp 的 Javascript 代码也无法对它从 https://login.microsoftonline.com.

收到的 HTML 响应做任何事情

如果您的 API 端点之一(例如 https:///mydomainname/api/webapp/people)检测到会话已过期,它应该 而不是 响应重定向到 https://login.microsoftonline.com,而是使用特定的错误代码,如

HTTP/1.1 403 Forbidden
Content-Type: application/json

{"error": "Session expired",
 "redirect": "https://mydomainname/login"}

当您的 WebApp 收到此消息时,它应该向标记为

的用户显示一个按钮

Session expired, press to login again

并按下此按钮应在新的浏览器选项卡中打开 https://mydomainname/login,然后自动重定向到 https://login.microsoftonline.com 等等。用户再次关闭该选项卡后,您的 WebApp 可以重复 API 请求。