2017-05-04 31 views
0

因此,我有一臺配置爲OpenID providerWAS Liberty服務器。然後我有一個使用REST Api端點的Angular應用程序。 當我第一次打開應用程序或在令牌過期後打開應用程序時,一切正常,WAS將我重定向到OpenID提供程序,然後定義由OpenID定義的流,並支持openidConnectClient-1.0實現。無法理解如何使用OpenID協議使用openidConnectClient-1.0功能和使用REST API端點的Angular應用程序

但我該如何關心以下用例:應用程序打開時令牌已過期,並且用戶在不重新加載應用程序的情況下發出GET或POST請求?現在WAS也執行重定向,所以我實際上無法區分常規響應和重定向(兩者均返回狀態200)。

我認爲唯一的解決方案是對Websphere表示不要爲某些端點執行重定向,而是要返回401/403錯誤。所以我可以在客戶端監控響應代碼並執行相應的操作。是否有可能實現?也許還有另一個我不知道的解決方案?


更新:我已經寫了這個之後,我想過用Authentication Filters,即定義是這樣的:

<authFilter id="testFilter"> 
     <webApp id="simple" matchType="contains" name="simple"/> 
     <requestUrl id="excludeUrl1" matchType="notContain" urlPattern="/basic"/> 
     <requestUrl id="excludeUrl1" matchType="notContain" urlPattern="/api"/> 
    </authFilter> 

但我立刻看到這種方法有兩個缺點:

  1. 在兩個不同的地方維護應用邏輯,server.xml和應用本身。它會使應用程序的維護非常繁瑣。
  2. 由於Authentication Filters的性質,它會回退到另一個registry執行登錄。這可能是一個安全缺陷。

更新2:從上面解決方案不起作用。當服務器返回401錯誤與www-authenticate標題一起時,瀏覽器會顯示基本身份驗證彈出窗口,請參閱下面的建議解決方案。

回答

0

要解決此問題,我已使用Angular's Interceptors,我在此檢查響應中是否有以下標題:no-cache, no-store, must-revalidate, private, max-age=0。如果他們堅持在響應中,我知道會話過期並執行重新加載我的應用程序。

重新加載時,Liberty本身將其重定向到SSO提供程序。另一個解決方案是從響應中提取重定向網址並手動重定向到該網址。

相關問題