跳至主要内容

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. 驗證簽章,登入完成
  1. 發起:在應用服務 (RP) 點擊登入。
  2. 轉導:瀏覽器導向中心身份伺服器 (IdP)。
  3. 驗證:使用者在 IdP 使用 Passkey 完成驗證。
  4. 授權:IdP 發放帶有簽名的 ID Token 給應用服務,完成登入。

Homelab 常見開源 IdP 方案​

方案特點適用情境
Pocket-ID原生專為 Passkey 設計,極致輕量,無傳統密碼概念追求極簡無密碼體驗
Authentik功能最完整,支援 OIDC、SAML、LDAP、Proxy 轉發認證服務眾多、需複雜權限與反向代理整合
Authelia輕量反向代理認證門神,常搭配 Traefik / NPM為無內建登入機制的服務增加防護層

相關連結​