為什麼單一登入 (SSO) 更好
單一登入 (SSO) 是簡化身份驗證模型並改善每個應用程式用戶體驗的一個好方法。以下是原因。
單一登入 (SSO) 是一種技術,讓用戶只需認證一次即可訪問多個應用程式。如果你只有一個應用程式,這可能聽起來多此一舉。然而,從一開始就使用 SSO 可以讓你在未來省去許多麻煩,並且實現 SSO 比你想像的更簡單。
在我們開始之前,我們需要注意有兩種類型的 SSO:
- 第一種類型是當你有多個應用程式共享同一個用戶資料庫時。這是我們將在本文中討論的 SSO 類型。
- 第二種類型是當你的客戶有一個集中的身份提供商 (IdP),而你需要與之整合。這超出了本文的討論範圍。
為什麼選擇 SSO?
簡化身份驗證模型
SSO 最明顯的好處就是簡化了身份驗證模型。想像一下你開始了一個線上商店,最初的身份驗證模型是簡單的:
隨著業務的增長,你決定新增一個商店管理應用程式,以允許商店老闆管理他們的商店。現在你有兩個需要驗證用戶的應用程式。
以下是你的一些選擇:
1. 你可以為商店管理應用程式創建一個獨立的用戶資料庫。
這是最簡單的方案,但意味著你需要為商店管理應用程式實現身份驗證過程,並且用戶需要創建一個新帳戶來使用該應用程式。
2. 你可以為兩個應用程式使用同一個用戶資料庫。
這是一個更好的方案,因為用戶不需要創建新帳戶。然而,你仍然需要為商店管理應用程式實現身份驗證過程。
3. 你可以使用 SSO。
這是目前最好的方案。你不需要再實現另一個身份驗證過程,並且用戶不需要為商店管理應用程式創建新帳戶。此外,你可以增加更多的應用程式和登入方式,而無需更改身份驗證模型或用戶體驗。
改善用戶體驗
SSO 在兩個方面改善用戶體驗:
- 用戶可以在多個應用程式中共享相同的帳戶。
- 一旦用戶在一個應用程式中登入,他們無需再在同一設備上的其他應用程式中再次登入。
這裡可能會出現一些疑慮,但它們都是可以解決的。
1. 如何區分應用程式?
單一登入並不意味著我們將所有應用程式視為相同。在廣為人知的開放標準 OpenID Connect 中,每個應用程式都被稱為一個客戶端,根據客戶端類型,身份驗證流程會有所不同。雖然最終用戶不需要知道這些差異,但客戶端類型對於身份驗證服務器確定身份驗證流程是重要的。
2. 如果用戶不想共享相同的帳戶怎麼辦?
這是一個合理的顧慮,但這不是 SSO 的問題。如果用戶不想共享相同的帳戶,他們可以為新應用程式創建一個新帳戶。關鍵是給用戶選擇的權利。
3. 如果我需要限制對某些應用程式的訪問怎麼辦?
事實上,SSO 是一種身份驗證技術,而訪問控制則是授權問題。SSO 可以與訪問控制解耦。例如,你可以使用 SSO 驗證用戶,然後使用 基於角色的訪問控制 (RBAC) 來限制對某些應用程式或資源的訪問。
要了解更多關於身份驗證和授權的資訊,請查看 CIAM 101: 驗證、身份、SSO。
4. SSO 需要將用戶重定向到身份驗證服務器。
重定向是身份驗證的標準做法。考慮到用戶體驗,我們可以利用多種技術來減少摩擦:
- 使用刷新令牌來降低身份驗證的頻率。
- 使用特定的登入方式(例如 Google 或 Facebook)初始化身份驗證過程,以減少點擊次數。
- 利用無聲身份驗證加快身份驗證過程。
增強安全性
1. 所有安全相關操作的集中地
SSO 允許你在一個集中地管理所有安全相關的操作。例如,正如我們在上一節中提到的,SSO 仍然可以區分應用程式並為每個應用程式應用特定平台的身份驗證流程。沒有 SSO 的情況下,你需要根據應用程式類型實現各種身份驗證流程。
此外,高級安全功能如 多因素身份驗證 (MFA) 在使用 SSO 時更容易實現,且不會破壞身份驗證模型。
2. 減少攻擊面
理論上,SSO 減少了攻擊面,因為你只需要保護一個身份驗證服務器,而不是多個應用程式。集中式的方法也使得更容易監控和檢測可疑活動。
3. 經過考驗的標準和協議
像 OpenID Connect 和 OAuth 2.0 這樣的開放標準和協議在行業中廣泛使用,並已經經過多年考驗。它們與 SSO 的概念相符,並受到了大多數身份提供商 (IdPs) 的支持。通過將這些標準與 SSO 結合,你可以擁有一個安全且可靠的身份驗證系統。