我擁有:
一個WebApp (ReactJs)、一個Api (Spring-Boot),每個都在Kubernetes的單個 pod 上運行,以及一個環繞這些的大使(WebApp 和 Api 具有相同的域),我的身份提供者是Azure AD。在 Azure AD 中,我為我的 WebApp配置了一個Web重定向 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 設定大使:https ://www.getambassador.io/docs/edge-stack/latest/howtos/sso/azure/但似乎我錯過了一些東西。有人知道它可能是什么嗎?
uj5u.com熱心網友回復:
您最初體驗的通過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 收到此訊息時,它應該向標記為的用戶顯示一個按鈕
會話已過期,請按再次登錄
并按下此按鈕應在新的瀏覽器選項卡中打開 https://mydomainname/login,然后將自動重定向到https://login.microsoftonline.com等等。用戶再次關閉該選項卡后,您的 WebApp 可以重復 API 請求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/457712.html
標籤:Kubernetes 天蓝色活动目录 科尔斯 大使
上一篇:在哪里放置Istio網路重試
