Golang Go语言中Casdoor + OAuth 实现单点登录 SSO

发布于 1周前 作者 vueper 来自 Go语言

简介

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

1

2

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

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

官网文档:https://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 等, 并支持扩展插件的新数据库

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

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

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

8

如何连接到 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

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

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/

点击右上角的登录按钮

9

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

2

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

10

11

12

13

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

14

写在最后

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

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

15


Golang Go语言中Casdoor + OAuth 实现单点登录 SSO

更多关于Golang Go语言中Casdoor + OAuth 实现单点登录 SSO的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

11 回复

你们的黑料可不少,包括不限于 https://cn.v2ex.com/t/895128

更多关于Golang Go语言中Casdoor + OAuth 实现单点登录 SSO的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


casdoor 发版过于频繁了…

虽然我知道发帖会增加你们的热度 ,但是你们这种推广也太……

你好,我是公众号《桑小榆呀》号主,觉得此篇内容非常有趣,能给到大家一些学习和帮助,希望能够分享到我的公众号,还望您能允许~谢谢!

好呀,感谢~ 可以加 V 详聊: Y2FzYmluMjAyMw== (base64)

#1 黑在哪,推广不是正常的吗。 除非有后门其他都是尬黑

V2EX 搜搜就知道了,不止这件事。

说真的,这种属于反向推广。

何止是反向推广。

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

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

在Golang中使用Casdoor结合OAuth实现单点登录(SSO)是一个常见的需求,这能够大大提升用户在不同应用间的登录体验。以下是一个简要的实现步骤概述:

  1. Casdoor部署与配置

    • 首先,需要在你的服务器上部署Casdoor,它是一个开源的身份认证与单点登录平台。
    • 配置Casdoor,包括创建组织、应用以及设置OAuth相关的回调URL等。
  2. OAuth客户端配置

    • 在Casdoor后台为你的应用配置OAuth客户端,获取客户端ID和客户端密钥。
    • 根据你的应用需求,选择支持的OAuth授权类型(如授权码模式)。
  3. Golang代码实现

    • 使用Golang的OAuth2库(如golang.org/x/oauth2)来处理OAuth流程。
    • 编写代码,引导用户到Casdoor的登录页面,并处理登录后的回调。
    • 在回调处理中,使用获取到的访问令牌(access token)去请求用户信息。
    • 根据用户信息创建或查找本地用户,并设置会话(session),实现单点登录。
  4. 安全性考虑

    • 确保HTTPS的使用,以保护传输中的敏感信息。
    • 验证和存储访问令牌与刷新令牌(如适用),并妥善管理它们的生命周期。
    • 实施CSRF保护,防止跨站请求伪造攻击。

通过上述步骤,你可以在Golang应用中成功集成Casdoor与OAuth,实现单点登录功能。详细实现可能需要根据你的具体需求进行调整。

回到顶部