1

我可以使用OpenId Connect在兩個單頁應用程序(SPA)之間實現SSO嗎?如果是的話,會有什麼流量。OpenId Connect,SSO和SPA

場景:App1(SPA)啓動並使用其中一個OIDC流獲取Id_token和acccess標記。然後它會產生許多REST API調用。稍後,用戶點擊一個可打開第二個SPA App2的按鈕。這兩款應用都屬於同一家公司。 App2可以使用Id_token和App1獲得的令牌來獲得SSO嗎?查看規範,答案似乎是否定的,因爲這些令牌是針對特定客戶的。使用OIDC在兩個SPA之間啓用SSO的任何其他流程?或者它超出了OpenId Connect的範圍,在這種情況下,我們必須考慮像CA,IBM等傳統的解決方案。謝謝。

回答

3

我會使用兩個應用程序的隱式流。它可以這樣工作:

  1. App1轉到OpenID Connect服務器的auth端點。爲了得到令牌,用戶必須得到認證,並且OIDC服務器可以爲他創建會話(由cookie標識)。
  2. App1用App2打開一個新選項卡。
  3. App2還沒有令牌,因此它會轉到OIDC身份驗證端點。 OIDC服務器識別在步驟1中創建的會話,並且可以決定釋放令牌而不進行認證並重定向回到App2。

這樣,每個應用程序都會獲得自己的令牌(是的,它們是針對特定客戶端發佈的)。而且用戶不會爲第二個應用程序的身份驗證感到困擾。但是,步驟3中的OIDC行爲不是標準化的,取決於實施。例如,它可能取決於應用程序請求的範圍 - 如果它們對於兩個應用程序都不相同,則OIDC也可能需要對第二個應用程序進行身份驗證。

如果您還需要單點登錄了,對於一個規範: http://openid.net/specs/openid-connect-session-1_0.html 你創建你的Apps兩個內部框架 - 一個用於檢測OIDC會話的變化,一個是第一個iframe和應用程序之間的通信。該規範甚至包含iframe文檔的示例。

+0

謝謝。在閱讀規範的第3.1.2.3節後,我們得出了相同的結論,該規則說明確切的方法取決於Auth服務器。現在,我們需要真實地嘗試它。 – user7898267