2017-08-22 37 views
0

我們有一個使用Azure Active Directory「輕鬆驗證」的單頁應用程序(SPA),例如無代碼解決方案。當用戶第一次打開應用程序時,這似乎工作正常。他們被重定向到Microsoft登錄頁面,他們可以進行身份​​驗證,然後訪問應用程序。即使用戶正在使用應用程序,Azure AD Easy Auth也會過期

然後,因爲它是一個SPA,用戶將四處瀏覽並僅觸發Ajax請求。會話cookie過期後,大約24小時後出現問題。用戶可能仍會打開相同的瀏覽器選項卡,並且不會執行整頁刷新。然後,他們可能正在處理記錄,並且在某個時刻,他們的下一個Ajax PUT請求會失敗,並顯示重定向HTTP狀態,並且他們將失去工作。

所以他們關鍵的問題是:

我們怎樣才能使SPA Ajax請求延長當前用戶的會話,這樣,當他們正在積極使用的應用程序的會議將不會過期?

看起來Azure AD Easy Auth服務並沒有「尊重」用戶方面的活動,這導致我們相信會話cookie永遠不會被更新。

注意:我們最近用/.auth/refresh端點做了一些測試,但這也不能解決問題。

+0

您能確認重定向到登錄頁面的請求是否包含身份驗證Cookie? –

+0

@FeiXue,是的,請求,例如一個PUT請求包含一個叫做'AppServiceAuthSession'的cookie。我們是否也應該用這些ajax調用發送一個無記名令牌?這是我們必須解決這個問題的一個想法。 – user1527312

回答

3

有幾種方法可以解決這個問題。下面是我能想到的幾個:

  1. 使用本地存儲:你提到的問題是用戶自己的工作失去了由於重定向。如果您將正在進行中的狀態保留在本地存儲中,以便在重定向回頁面時可用,則可以解決丟失工作的問題。
  2. 切換到使用令牌:在使用AAD時,/.auth/refresh端點不刷新AppServiceAuthSession,因爲AAD不支持刷新用戶信息。你可以做的是使用x-zumo-auth令牌對你的後端進行身份驗證。 /.auth/refresh端點將正確刷新這些令牌。如果您使用/.auth/login/aad明確登錄用戶,則可以將session_mode=token作爲查詢字符串參數添加。如果您使用Mobile Apps JavaScript SDK,則完成此操作。如果登錄是自動的,那麼您需要在您的身份驗證配置的additionalLoginParams設置中添加session_mode=token。然後,您可以從登錄完成後添加到URL中的#token片段解析身份驗證令牌。
  3. 使用隱藏的iframe:我還沒有嘗試過這個,但是如果你能得到它的工作,它可能需要最少量的代碼更改。這個想法是,當您檢測到它們處於活動狀態時,您會使用隱藏的iframe來定期重新登錄該用戶。 iframe需要指向類似./auth/login/aad?prompt=none&domain_hint={userdomain.com}的地方,其中{userdomain.com}是用戶電子郵件地址的最後部分 - 例如, contoso.com。這些參數將傳遞到AAD登錄頁面,並且登錄應自動完成,無需任何用戶交互。在瀏覽器窗口中手動測試幾次,以確保其正常工作。結果應該是更新後的auth cookie,並有新的到期日期。

如果您對這些選項有任何疑問或問題,請在評論中告訴我。

+1

克里斯 - 謝謝你的信息。隱藏的iframe方法似乎正在工作,所以我們將在生產中進行實驗。我發現的一件事是,在使用'document.getElementById('FrameID')。contentWindow.location.reload(true)'的Chrome 60中,不刷新會話cookie,但是使用document.getElementById('FrameID')。src ='/.auth/login/aad?prompt = none&domain_hint = mydomain.com''確實刷新了會話cookie。 – user1527312

+0

更新:隱藏的iframe解決方案確實有效,但要注意: 'document.getElementById('FrameID')。src ='/.auth/login/aad?prompt = none&domain_hint = mydomain.com'會導致歷史記錄成爲寫入瀏覽器,因此用戶可能必須兩次點擊後退按鈕。因此,我們正在從DOM中刪除iframe,並再次將其添加回來以刷新cookie。查看更多信息:https://stackoverflow.com/questions/821359/reload-an-iframe-without-adding-to-the-history – user1527312

相關問題