總瀏覽 —

← 返回作品列表
個人作品
上線中

Sanring SSO

各系統共用的自建 OIDC 統一登入與帳號權限服務

內部系統,無公開網址,僅提供截圖

Sanring SSO
統一登入頁
我的系統
安全性設定
使用者管理
組織架構圖

Sanring SSO

1 / 6

重點

  • 以 OpenIddict 自建 IdP,並自行實作 OIDC Back-Channel Logout,登出與停權即時跨系統生效
  • 135 個測試涵蓋 50 種安全與流程情境
  • CI 含 .NET 安全分析、相依弱點掃描、secret 掃描、Semgrep、Trivy 與 OWASP ZAP

背景與目標

登入、帳號與角色原本寫在官網裡,獨立成 IdP 後,多個系統共用同一套帳號;新系統接入只需註冊,不用改程式或資料表。

核心功能

  • OIDC 登入:Authorization Code + PKCE、refresh token 輪替;服務帳號使用 client credentials
  • 即時跨系統登出:登出只結束當前工作階段,停權則撤銷全部;通知失敗會排隊重送
  • 依權限要求 MFA:有編輯權限的使用者必須綁定 TOTP 並取得備用碼,唯讀使用者免綁
  • 系統與權限註冊:每個系統有自己的權限代碼與角色;使用者失去最後一個角色時自動停用
  • 登入頁與帳號中心:中英雙語登入頁、Google 登入,以及 Angular 帳號中心

技術架構

  • IdP

    單一專案同時提供 Razor 登入頁與 Angular 帳號中心

  • 帳號模型

    OpenIddict 只負責協定層,帳號、角色與權限自行實作(ASP.NET Core Identity)

  • 資料與部署

    PostgreSQL、Redis,Docker Compose 部署

  • 已接入系統

挑戰與解法

  • 自建還是採購 IdP:評估後選擇自建,OpenIddict 處理協定細節,帳號與權限模型保留彈性。
  • OpenIddict 沒有 Back-Channel Logout:依規格自行實作簽章的 logout token、失敗重送佇列,接收端檢查 token 識別碼防止重放。
  • CSP 擋住登入轉址:加上 form-action 限制後,各系統的登入轉址被阻擋,改以中介頁轉址解決。