Casdoor + OAuth 實現單點登錄 SSO

  • 2022 年 4 月 12 日
  • 筆記

簡介

Casdoor 是一個基於 OAuth 2.0 / OIDC 的中心化的單點登錄(SSO)身份驗證平台,簡單來說,就是 Casdoor 可以幫你解決用戶管理的難題,你無需開發用戶登錄、註冊等與用戶鑒權相關的一系列功能,只需幾個步驟進行簡單配置,與你的主應用配合,便可完全託管你的用戶模組,簡單省心,功能強大。Casdoor 目前作為 Casbin 社區項目統一使用的鑒權平台,並且項目已開源。

1

2

倉庫地址://github.com/casbin/casdoor

演示地址://door.casbin.com/

官網文檔://casdoor.org/

為什麼要用 Casdoor?

3

用戶管理一直是項目中非常令人頭疼的一個問題,不僅要確保安全性,功能是否完整,方便使用也十分重要。目前大多數應用已從過去單一的帳號密碼登錄,逐漸升級為允許通過第三方平台登錄,例如 GitHub 、微信、QQ 等,但是這一套邏輯依然需要開發者去實現,大多數功能偏離了業務。

Casdoor 就是替開發者們解決這個難題,即提供一套統一的鑒權平台,只需要簡單配置便可完全託管用戶模組,功能完備,配置簡單,上手難度低。它具有以下特性:

  1. 前後端分離的架構,前端使用react,後端使用 Go 語言開發,Casdoor 支援高並發,提供基於Web的用戶管理 UI,並支援中、英等多種語言

4

  1. Casdoor 支援 Github, Google, QQ, WeChat, Facebook, Gitee 等第三方應用程式登錄,並支援使用插件擴展第三方登錄

  2. 使用 Casbin 基於授權管理,Casdoor 支援 ACL, RBAC, ABAC, RESTful 等訪問控制模型

  3. 個性化的註冊、登錄和忘記密碼頁面。支援手機驗證碼、郵件驗證碼、找回密碼等功能

    4

    5

  4. 使用阿里雲、騰訊雲、七牛雲提供的圖片CDN雲存儲

  5. Casdoor 支援使用 db 同步方法與現有系統的集成,用戶可以順利過渡到Casdoor

  6. Casdoor 支援的主流資料庫: MySQL, SQL Server, PostgreSQL 等, 並支援擴展插件的新資料庫

工作原理

首先,Casdoor 的授權程式建立在 OAuth 2 的基礎上:OAuth 2 是一個工業級別的開發授權協議,可以使用戶授權第三方網站/應用訪問他們在特定網站上的資訊,而不必向第三方網站/應用提供密碼。

整個過程如下圖所示,一共分成六個步驟:向用戶發送授權請求、獲得授權認證、向授權伺服器發送授權認證並驗證、獲取訪問令牌、給資源伺服器發送訪問令牌、獲得受保護的資源。

8

如何連接到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 的使用效果。

//forum.casbin.com/

點擊右上角的登錄按鈕

9

進入登錄選擇介面,可以選擇一個你信任的或常用的平台進行授權

2

授權之後會進入登錄頁面,以 Google, Wechat, QQ, Gitee 為例

10

11

12

13

登錄成功之後可以在設置里查看用戶資訊,並且可以綁定其他平台的帳號,以便下次登陸

14

寫在最後

我們希望 Casdoor 能幫助廣大開發者們解決用戶管理的難題,更專註主要業務,提高開發效率。同時作為一個開源項目,我們也非常希望獲得大家的使用建議,幫助我們更好地改善項目品質,從功能、易用性等方面更好地滿足大家的需求。

如果使用過程中有任何疑問,歡迎加入社區 QQ 群交流(QQ群:645200447),提 Issues、提 PR 也是十分歡迎的!

15