OIDC 與現代身份認證
當 Homelab 服務增加到十幾二十個(NAS、Jellyfin、Immich、Grafana、Git 等)時,為每個服務各自管理帳號密碼會帶來極高的維護負擔與安全風險。
現代網路架構的解法是:採用 OIDC (OpenID Connect) 標準,並搭配 Passkey (通行密鑰) 實現無密碼單一登入。
身份認證趨勢:Passkey
什麼是 Passkey?
Passkey 是基於 FIDO2 / WebAuthn 標準的無密碼技術。在日常使用中,它對應的具體操作就是:
- Apple 裝置:Face ID(臉部辨識)或 Touch ID(指紋辨識)。
- Windows PC:Windows Hello(臉部、指紋或 PIN)。
- Android 裝置:螢幕指紋辨識或臉部辨識。
- 實體硬體鎖:YubiKey 等安全金鑰。
使用體驗
- 註冊:點擊建立 Passkey,按指紋或刷臉即可完成,不需自訂密碼。
- 登入:點擊登入,刷臉或按指紋 1 秒完成驗證。
- 跨裝置:在其他電腦登入時,用手機相機掃描螢幕 QR Code 並刷臉即可登入。
為什麼比傳統密碼安全?
- 防釣魚:私鑰只保存在裝置硬體晶片中,伺服器只存公鑰;且 Passkey 綁定網域名稱,在假網站上無法觸發。
- 不重複:每個網站獨立生成金鑰,無撞庫風險。
- 自動同步:透過 iCloud 鑰匙圈、Google 密碼管理員或 1Password/Bitwarden 進行端到端加密同步。
什麼是 OIDC?
OIDC (OpenID Connect) 是建立在 OAuth 2.0 授權框架之上的身分認證協定:
- OAuth 2.0:負責「授權」(決定應用能讀取什麼資料)。
- OIDC:負責「認證」(確認使用者的真實身分)。
OIDC 運作流程
sequenceDiagram
autonumber
actor User as 使用者
participant RP as 應用服務 (如 Immich)
participant IdP as 身份伺服器 (如 Authentik)
User->>RP: 1. 點擊「SSO 登入」
RP->>IdP: 2. 轉導至 IdP 驗證頁面
User->>IdP: 3. 使用 Passkey (指紋 / 臉部) 完成驗證
IdP-->>RP: 4. 發放簽署的 ID Token (JWT)
RP->>User: 5. 驗證簽章,登入完成
- 發起:在應用服務 (RP) 點擊登入。
- 轉導:瀏覽器導向中心身份伺服器 (IdP)。
- 驗證:使用者在 IdP 使用 Passkey 完成驗證。
- 授權:IdP 發放帶有簽名的 ID Token 給應用服務,完成登入。
Homelab 常見開源 IdP 方案
| 方案 | 特點 | 適用情境 |
|---|---|---|
| Pocket-ID | 原生專為 Passkey 設計,極致輕量,無傳統密碼概念 | 追求極簡無密碼體驗 |
| Authentik | 功能最完整,支援 OIDC、SAML、LDAP、Proxy 轉發認證 | 服務眾多、需複雜權限與反向代理整合 |
| Authelia | 輕量反向代理認證門神,常搭配 Traefik / NPM | 為無內建登入機制的服務增加防護層 |