Casdoor + OAuth 实现单点登录 SSO

2022-11-25 10:08:53 +08:00
 Casbin

简介

Casdoor 是一个基于 OAuth 2.0 / OIDC 的中心化的单点登录( SSO )身份验证平台,简单来说,就是 Casdoor 可以帮你解决用户管理的难题,你无需开发用户登录、注册等与用户鉴权相关的一系列功能,只需几个步骤进行简单配置,与你的主应用配合,便可完全托管你的用户模块,简单省心,功能强大。Casdoor 目前作为 Casbin 社区项目统一使用的鉴权平台,并且项目已开源。

仓库地址:https://github.com/casbin/casdoor

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

官网文档:https://casdoor.org/

为什么要用 Casdoor ?

用户管理一直是项目中非常令人头疼的一个问题,不仅要确保安全性,功能是否完整,方便使用也十分重要。目前大多数应用已从过去单一的账号密码登录,逐渐升级为允许通过第三方平台登录,例如 GitHub 、微信、QQ 等,但是这一套逻辑依然需要开发者去实现,大多数功能偏离了业务。

Casdoor 就是替开发者们解决这个难题,即提供一套统一的鉴权平台,只需要简单配置便可完全托管用户模块,功能完备,配置简单,上手难度低。它具有以下特性:

  1. 前后端分离的架构,前端使用 react ,后端使用 Go 语言开发,Casdoor 支持高并发,提供基于 Web 的用户管理 UI ,并支持中、英等多种语言

  1. Casdoor 支持 Github, Google, QQ, WeChat, Facebook, Gitee 等第三方应用程序登录,并支持使用插件扩展第三方登录

  2. 使用 Casbin 基于授权管理,Casdoor 支持 ACL, RBAC, ABAC, RESTful 等访问控制模型

  3. 个性化的注册、登录和忘记密码页面。支持手机验证码、邮件验证码、找回密码等功能

  4. 使用阿里云、腾讯云、七牛云提供的图片 CDN 云存储

  5. Casdoor 支持使用 db 同步方法与现有系统的集成,用户可以顺利过渡到 Casdoor

  6. Casdoor 支持的主流数据库: MySQL, SQL Server, PostgreSQL 等, 并支持扩展插件的新数据库

工作原理<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button>

首先,Casdoor 的授权程序建立在 OAuth 2 的基础上:OAuth 2 是一个工业级别的开发授权协议,可以使用户授权第三方网站 /应用访问他们在特定网站上的信息,而不必向第三方网站 /应用提供密码。

整个过程如下图所示,一共分成六个步骤:向用户发送授权请求、获得授权认证、向授权服务器发送授权认证并验证、获取访问令牌、给资源服务器发送访问令牌、获得受保护的资源。

如何连接到 Casdoor ?<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button>

作为服务提供商(SP),Casdoor 支持两项认证协议:OAuth 2.0 (OIDC) 和 SAML ;作为身份提供商 (Idp),Casdoor 也支持两个认证协议:OAuth 2.0 (OIDC) 和 CAS 2.0 。

因此,您的应用程序将通过 OAuth 2.0 (OIDC) 与 Casdoor 连接。 具体而言,有三种方式:

1. 标准 OIDC 客户端<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button>

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<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button>

与标准的 OIDC 协议相比,Casdoor 在 SDK 中提供了更多的功能,如用户管理、资源上传等。 通过 Casdoor SDK 连接到 Casdoor 的成本比使用 OIDC 标准客户端库更高,并将提供灵活性最佳和最强大的 API 。

Casdoor SDK 可分为两类:前端 sdk 和后端 sdk

前端 sdk 源码地址
JavaScript sdk https://github.com/casdoor/casdoor-js-sdk
Vue sdk https://github.com/casdoor/casdoor-vue-sdk
Android sdk https://github.com/casdoor/casdoor-android-sdk
IOS sdk https://github.com/casdoor/casdoor-ios-sdk
后端 sdk 源码地址
Go sdk https://github.com/casdoor/casdoor-go-sdk
Java sdk https://github.com/casdoor/casdoor-java-sdk
Node.js sdk https://github.com/casdoor/casdoor-nodejs-sdk
Python sdk https://github.com/casdoor/casdoor-python-sdk
PHP sdk https://github.com/casdoor/casdoor-php-sdk
.NET sdk https://github.com/casdoor/casdonet-sdk

前后端配置的详细方法请参考文档

https://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 的使用效果。

https://forum.casbin.com/

点击右上角的登录按钮

进入登录选择界面,可以选择一个你信任的或常用的平台进行授权

授权之后会进入登录页面,以 Google, Wechat, QQ, Gitee 为例

登录成功之后可以在设置里查看用户信息,并且可以绑定其他平台的账号,以便下次登陆

写在最后

我们希望 Casdoor 能帮助广大开发者们解决用户管理的难题,更专注主要业务,提高开发效率。同时作为一个开源项目,我们也非常希望获得大家的使用建议,帮助我们更好地改善项目质量,从功能、易用性等方面更好地满足大家的需求。

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

2763 次点击
所在节点    Go 编程语言
10 条回复
interim
2022-11-25 11:23:46 +08:00
你们的黑料可不少,包括不限于 https://cn.v2ex.com/t/895128
janxin
2022-11-25 11:44:06 +08:00
casdoor 发版过于频繁了...
sheltonZ
2022-11-25 12:38:53 +08:00
@interim 多来点
yopv2
2022-11-25 12:46:20 +08:00
虽然我知道发帖会增加你们的热度 ,但是你们这种推广也太……
ElicaKing
337 天前
你好,我是公众号《桑小榆呀》号主,觉得此篇内容非常有趣,能给到大家一些学习和帮助,希望能够分享到我的公众号,还望您能允许~谢谢!
Casbin
337 天前
@ElicaKing 好呀,感谢~ 可以加 V 详聊: Y2FzYmluMjAyMw== (base64)
jiangzm
261 天前
@interim #1 黑在哪,推广不是正常的吗。 除非有后门其他都是尬黑
interim
261 天前
@jiangzm V2EX 搜搜就知道了,不止这件事。
pytth
260 天前
说真的,这种属于反向推广。
akaHenry
257 天前
@pytth 何止是反向推广。

v2 置顶广告,天天刷屏,出来秀下限。

日常招黑,早就 Block 了。还是时不时能刷到。🥲

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/897774

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX