AgileConfig 已經好久好久沒有更新過比較大的功能了。一是 AgileConfig 本身的定位就是比較輕量,不想集成太多的功能。二是比較忙(懶)。但是本次升級給大家帶來了一個比較有用的功能 SSO。 。但是本次升級給大家帶來了一個比較有用的功能 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
如何使用
- 升級 AgileConfig 到最新版本或者 tag:1.7.0 以上
- 在配置文件或者環境變數中配置 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
關註我的公眾號一起玩轉技術
QQ群:1022985150 VX:kklldog 一起探討學習.NET技術
作者:Agile.Zhou(kklldog)
出處:http://www.cnblogs.com/kklldog/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。