什麼是身分提供者 (Identity provider, IdP)?
在 身分與存取管理 (Identity and access management, IAM) 的領域中,身分提供者 (IdP) 是用於管理身分的核心服務。它負責對用戶進行身份驗證,發行身分 token 並向 服務提供者 (例如應用程序、服務、API)提供用戶信息。
除了 認證 (Authentication) ,現代的身分提供者還負責 授權 (Authorization) (執行 存取控制 (Access control) 政策)並支持一些先進特性,例如 單一登入 (Single sign-on, SSO) 和 多租户 (Multi-tenancy) 。
身分提供者的標準
由於身分管理的特性以及互操作性的需求,不採用標準來構建身分提供者是不切實際且效率低下的。以下是一些典型的場景:
- 兩個身分提供者需要彼此通訊來交換用戶信息(例如,社會登錄)。
- 一個應用需要使用多個身分提供者進行用戶 authentication (例如,聯邦身份)。
- 一個身分提供者需要支持多種類型的 client(例如,網頁、移動、IoT)。
為了解決這些場景,行業中開發了幾個熱門標準:
- OAuth 2.0 :一個廣泛使用的 authorization 框架,允許應用程序代表用戶或服務獲得訪問權限。
- OpenID Connect (OIDC) :構建在 OAuth 2.0 之上的身份層,提供 authentication 和用戶信息。
- 安全斷言標記語言 (Security Assertion Markup Language, SAML) :一種在安全領域間交換 authentication 和 authorization 數據的標準。
對於新應用程序,OpenID Connect (OIDC) 是建議用來構建身分提供者或與現有身分提供者集成的標準。
身分提供者的架構
“身分提供者”這個術語並不指特定的架構或實現。也就是說,身分提供者可以是單體應用程序、一個微服務或者是一個雲服務。
由於身分管理的複雜性和關鍵性,現代應用程式趨向於使用專門的身分提供者作為獨立的服務或供應商方案。
身分提供者的特徵
現代的身分提供者提供了範圍廣泛的功能來支持各種用例和需求。以下是一些常見功能:
- 認證 (Authentication) :使用多種方法驗證用戶身份(例如,使用者名稱/密碼、社會登錄、 多因素認證 (Multi-factor authentication, MFA) )。
- 授權 (Authorization) :執行 access control 政策並管理用戶權限(例如, 基於角色的存取控制 (Role-based access control, RBAC) , 基於屬性的存取控制 (Attribute-based access control, ABAC) )。
- 用戶管理:創建、更新和刪除用戶賬戶和配置檔;向 服務提供者 提供用戶數據。
- Token 管理:發行和管理身份 token(例如,ID token,access token,refresh token)。
- 單一登入 (Single sign-on, SSO) :使用戶僅需 authentication 一次即可訪問多個應用程式。
- 多租户 (Multi-tenancy) :支持多個組織或租戶,具有隔離的用戶數據和配置。