AgileConfig-1.7.0 釋出,支援 SSO 🎉🎉🎉

2023-08-28 06:00:28

AgileConfig 已經好久好久沒有更新過比較大的功能了。一是 AgileConfig 本身的定位就是比較輕量,不想整合太多的功能。二是比較忙(懶)。但是本次升級給大家帶來了一個比較有用的功能 SSO。

SSO 嘛大家都懂,單點登入,稍微上點規模的公司內部都會有統一的單點登入服務。
目前 SSO 主流協定基本上就是兩種:

  • OIDC(OAuth2.0) - OpenID Connect
  • SAML 2.0 - Security Assertion Markup Language

本次 SSO 的實現採用了基於 OIDC 協定的 Code Flow 模式來實現,可以說這是目前市面上最流行的整合方案。
由於這次不是討論 OIDC 的具體實現,關於 OIDC 相關的知識就不多說了。

圖片出處:https://docs.walt.id/v/idpkit/concepts/oidc-recap

如何使用

  1. 升級 AgileConfig 到最新版本或者 tag:1.7.0 以上
  2. 在組態檔或者環境變數中設定 SSO 相關資訊

以下對設定的引數進行詳細說明:

引數說明

引數 說明 範例
SSO:enabled 是否開啟 sso true
SSO:loginButtonText 自定義 SSO 跳轉按鈕的文字 Azure SSO
SSO:OIDC:clientId OIDC 使用者端 ID 2bb823b7-f1ad-48c7-a9a1-713e9a885a5d
SSO:OIDC:clientSecret OIDC 使用者端 金鑰 6B29FC40-CA47-1067-B31D-00DD010662DA
SSO:OIDC:redirectUri OIDC Server 授權成功後的回撥地址, 預設為服務部署域名(或者ip+port)+ /sso http://localhost:5000/sso
SSO:OIDC:tokenEndpoint code 獲取 token 的地址,這個地址一般在 OIDC 服務商那裡會明確告知 https://login.microsoftonline.com/7aa25791-9a8c-4be4-872f-289bfec8cddb/oauth2/v2.0/token
SSO:OIDC:tokenEndpointAuthMethod 獲取 token 介面的認證方案,目前支援:client_secret_post, client_secret_basic, none 三種方案,預設為:client_secret_post client_secret_post
SSO:OIDC:authorizationEndpoint OIDC Server 授權地址,通常是 OIDC 服務商會明確告知。本地服務會加上 response_type,redirect_uri 等引數,構造出完整的授權 URL https://login.microsoftonline.com/7aa25791-9a8c-4be4-872f-289bfec8cddb/oauth2/v2.0/authorize
SSO:OIDC:userIdClaim ID token 中使用者 ID 的 claim key,預設為 sub sub
SSO:OIDC:userNameClaim ID token 中使用者 name 的 claim key,預設為 name name
SSO:OIDC:scope token 攜帶的 claim 的範圍,預設 openid profile openid profile

如果使用原始碼執行請對 appsettings.json 進行修改,範例如下:

  "SSO": {
    "enabled": true, 
    "loginButtonText": "SSO",
    "OIDC": {
      "clientId": "2bb823b7-f1ad-48c7-a9a1-713e9a885a5d",
      "clientSecret": "", 
      "redirectUri": "http://localhost:5000/sso", 
      "tokenEndpoint": "https://login.microsoftonline.com/7aa25791-9a8c-4be4-872f-289bfec8cddb/oauth2/v2.0/token",
      "tokenEndpointAuthMethod": "client_secret_post", client_secret_post, client_secret_basic, none. default=client_secret_post.
      "authorizationEndpoint": "https://login.microsoftonline.com/7aa25791-9a8c-4be4-872f-289bfec8cddb/oauth2/v2.0/authorize", 
      "userIdClaim": "sub", 
      "userNameClaim": "name", 
      "scope": "openid profile" 
    }
  }

如果使用 docker compose 執行請使用環境變數修改設定:


  agile_config:
    image: "kklldog/agile_config:latest"
    ports:
      - "15000:5000"
    networks:
      - net0
    volumes:
      - /etc/localtime:/etc/localtime
    environment:
      - TZ=Asia/Shanghai
      - adminConsole=true
      - db:provider=mysql
      - db:conn= Allow User Variables=true;database=agile_config_preview;data source=mysql8;User Id=root;password=1;

      - SSO:enabled=true
      - SSO:loginButtonText=Azure SSO
      - SSO:OIDC:clientId=2bb823b7-f1ad-48c7-a9a1-713e9a885a5d
      - SSO:OIDC:clientSecret=1
      - SSO:OIDC:redirectUri=https://agileconfig-server.xbaby.xyz/sso
      - SSO:OIDC:tokenEndpoint=https://login.microsoftonline.com/7aa25791-9a8c-4be4-872f-289bfec8cddb/oauth2/v2.0/token
      - SSO:OIDC:authorizationEndpoint=https://login.microsoftonline.com/7aa25791-9a8c-4be4-872f-289bfec8cddb/oauth2/v2.0/authorize

資料庫表更新

本次釋出對 agc_user 表進行了修改,如是從低版本升級上來的請手動調整資料庫:

  • id 長度增加到 50
  • 新增一個欄位source ,mysql的型別為 enum(Normal, SSO),sql server 的型別為 int

後續

目前 SSO、OIDC 的相關設定通過組態檔或者環境變數來設定略顯麻煩,後面如有時間會新增相關介面來進行設定,敬請期待。如果同學你有時間,那麼可以給我 PR ,讓我們一起為 .NET 的生態盡一份力。

最後

✨✨✨ Github地址:https://github.com/dotnetcore/AgileConfig 開源不易,歡迎 star ✨✨✨

演示地址:http://agileconfig-server.xbaby.xyz/ 超管賬號:admin 密碼:123456

關注我的公眾號一起玩轉技術