Casdoor + OAuth 實現單點登錄 SSO
- 2022 年 4 月 12 日
- 筆記
簡介
Casdoor 是一個基於 OAuth 2.0 / OIDC 的中心化的單點登錄(SSO)身份驗證平台,簡單來說,就是 Casdoor 可以幫你解決用戶管理的難題,你無需開發用戶登錄、註冊等與用戶鑒權相關的一系列功能,只需幾個步驟進行簡單配置,與你的主應用配合,便可完全託管你的用戶模組,簡單省心,功能強大。Casdoor 目前作為 Casbin 社區項目統一使用的鑒權平台,並且項目已開源。
倉庫地址://github.com/casbin/casdoor
演示地址://door.casbin.com/
官網文檔://casdoor.org/
為什麼要用 Casdoor?
用戶管理一直是項目中非常令人頭疼的一個問題,不僅要確保安全性,功能是否完整,方便使用也十分重要。目前大多數應用已從過去單一的帳號密碼登錄,逐漸升級為允許通過第三方平台登錄,例如 GitHub 、微信、QQ 等,但是這一套邏輯依然需要開發者去實現,大多數功能偏離了業務。
Casdoor 就是替開發者們解決這個難題,即提供一套統一的鑒權平台,只需要簡單配置便可完全託管用戶模組,功能完備,配置簡單,上手難度低。它具有以下特性:
- 前後端分離的架構,前端使用react,後端使用 Go 語言開發,Casdoor 支援高並發,提供基於Web的用戶管理 UI,並支援中、英等多種語言
-
Casdoor 支援 Github, Google, QQ, WeChat, Facebook, Gitee 等第三方應用程式登錄,並支援使用插件擴展第三方登錄
-
使用 Casbin 基於授權管理,Casdoor 支援 ACL, RBAC, ABAC, RESTful 等訪問控制模型
-
個性化的註冊、登錄和忘記密碼頁面。支援手機驗證碼、郵件驗證碼、找回密碼等功能
-
使用阿里雲、騰訊雲、七牛雲提供的圖片CDN雲存儲
-
Casdoor 支援使用 db 同步方法與現有系統的集成,用戶可以順利過渡到Casdoor
-
Casdoor 支援的主流資料庫: MySQL, SQL Server, PostgreSQL 等, 並支援擴展插件的新資料庫
工作原理
首先,Casdoor 的授權程式建立在 OAuth 2 的基礎上:OAuth 2 是一個工業級別的開發授權協議,可以使用戶授權第三方網站/應用訪問他們在特定網站上的資訊,而不必向第三方網站/應用提供密碼。
整個過程如下圖所示,一共分成六個步驟:向用戶發送授權請求、獲得授權認證、向授權伺服器發送授權認證並驗證、獲取訪問令牌、給資源伺服器發送訪問令牌、獲得受保護的資源。
如何連接到Casdoor?
作為服務提供商(SP),Casdoor 支援兩項認證協議:OAuth 2.0 (OIDC) 和 SAML;作為身份提供商 (Idp),Casdoor 也支援兩個認證協議:OAuth 2.0 (OIDC) 和 CAS 2.0。
因此,您的應用程式將通過 OAuth 2.0 (OIDC) 與 Casdoor 連接。 具體而言,有三種方式:
1. 標準OIDC 客戶端
Casdoor 完全實現了OIDC協議。 如果您的應用程式已經運行了另一個 OAuth 2,那麼 (OIDC) 身份提供商一般會通過標準的 OIDC 客戶端庫提供服務,如果您想要遷移到Casdoor, 使用 OIDC discovery會幫助您非常容易地切換到Casdoor。Casdoor’s OIDC discovery URL 是
<your-casdoor-backend-host>/.well-known/openid-configuration
2. Casdoor SDK
與標準的 OIDC 協議相比,Casdoor 在 SDK 中提供了更多的功能,如用戶管理、資源上傳等。 通過 Casdoor SDK 連接到 Casdoor 的成本比使用 OIDC 標準客戶端庫更高,並將提供靈活性最佳和最強大的 API。
Casdoor SDK可分為兩類:前端sdk和後端sdk
前端sdk | 源碼地址 |
---|---|
JavaScript sdk | //github.com/casdoor/casdoor-js-sdk |
Vue sdk | //github.com/casdoor/casdoor-vue-sdk |
Android sdk | //github.com/casdoor/casdoor-android-sdk |
IOS sdk | //github.com/casdoor/casdoor-ios-sdk |
後端sdk | 源碼地址 |
---|---|
Go sdk | //github.com/casdoor/casdoor-go-sdk |
Java sdk | //github.com/casdoor/casdoor-java-sdk |
Node.js sdk | //github.com/casdoor/casdoor-nodejs-sdk |
Python sdk | //github.com/casdoor/casdoor-python-sdk |
PHP sdk | //github.com/casdoor/casdoor-php-sdk |
.NET sdk | //github.com/casdoor/casdonet-sdk |
前後端配置的詳細方法請參考文檔
//casdoor.org/zh/docs/how-to-connect/sdk
3. Casdoor 插件
如果您的應用是建立在一個流行的平台上,並且Casdoor(或第三方) 已經為它提供了一個插件或中間件,那麼就可以直接使用。它比手動使用 Casdoor SDK 更容易使用,因為前者是專門為平台製作的。
Casdoor為一些熱門平台提供插件或中間件,例如Java的SpringBoot、PHP的WordPress、Python的Odoo等
效果演示
Casnode 是Casbin社區開發的官方論壇,它使用的就是 Casdoor 作為認證平台並管理成員。下面以 Casnode 的登陸為例演示 Casdoor 的使用效果。
點擊右上角的登錄按鈕
進入登錄選擇介面,可以選擇一個你信任的或常用的平台進行授權
授權之後會進入登錄頁面,以 Google, Wechat, QQ, Gitee 為例
登錄成功之後可以在設置里查看用戶資訊,並且可以綁定其他平台的帳號,以便下次登陸
寫在最後
我們希望 Casdoor 能幫助廣大開發者們解決用戶管理的難題,更專註主要業務,提高開發效率。同時作為一個開源項目,我們也非常希望獲得大家的使用建議,幫助我們更好地改善項目品質,從功能、易用性等方面更好地滿足大家的需求。
如果使用過程中有任何疑問,歡迎加入社區 QQ 群交流(QQ群:645200447),提 Issues、提 PR 也是十分歡迎的!