Lazy loaded image
Lazy loaded imagenCalendar 第三方登录集成:GitHub 篇(Dex)
字数 1136阅读时长≈ 3 分钟
2025-6-4
type
status
date
slug
summary
category
tags
create_time
Jun 4, 2025 07:15 AM
icon
password
my_create_time

🧭 背景介绍

nCalendar 是一个集成 Notion 模板、日历与本地提醒的自动化时间管理工具。
现已以 SaaS 模式提供使用
为提升用户体验并支持统一认证体系,我们选择通过 Dex 实现 OAuth 登录,使用 Dex 集中处理所有身份接入。
Dex 是一款开源的 OIDC 身份提供平台,可对接 GitHub、Google 等多个身份源,nCalendar 则作为 OIDC 客户端,通过 Dex 实现 OAuth 登录接入。

💡 使用场景

  • 希望通过 Dex 提供统一登录入口(SSO);
  • 需要简化账号管理、增强安全性并提升登录一致性。
  • nCalendar 不直接处理 GitHub 登录,而是通过 Dex 做认证中介。

✅ 实现目标

1、用户在登录页面,可点击 使用Github登录
2、点击 使用Github登录,跳转至 Github 认证授权页面(若用户已在Github登录则直接进入nCalendar 管理页面)
3、用户在 Github 登录页面输入 Github 的账号密码认证
4、用户认证通过后进入 nCalendar 管理页面
5、若用户账户在 nCalendar 中未注册则使用 Github 用户名和邮箱自动注册

🖼️ Github 登录流程图

notion image

⚙️ 集成步骤

1️⃣ 在 GitHub 创建 OAuth App

首先需要有一个 Github 账号,再点击右上角头像 Settings → GitHub Developer SettingsOAuth Apps → New OAuth App,截图如下:
notion image
notion image
notion image
应用名称、应用主页和应用描述,根据你的实际情况输入。
授权回调地址比较关键,我这里因为是统一使用的 Dex 做认证,所以直接写 Dex 的/callback
notion image
生成 Client secrets,上传应用 logo
notion image
💡
注意:这里生成的 Client ID 和 Client secrets 非常重要,需要保存好,在后续 Dex 集成配置时会用到。
最后点击保存更新配置即可。

2️⃣ 配置 Dex 对接 GitHub

在 Dex 的配置文件 config.yaml 中添加 GitHub Connector:
这里的clientIDclientSecretredirectURI,需要跟上面Github中的保持一致。

3️⃣ 配置 nCalendar 作为 Dex 的 OAuth 客户端

在 Dex 中添加一个静态客户端用于 nCalendar 的 Github 登录:
这一步的目的就是为了使用 Github 登录成功后可以跳转回 nCalendar。

4️⃣ 登录完成后,nCalendar 获取用户信息

Dex 回调 https://ncalendar.lusyoe.com/ncalendar/oauth/callback
正常来说 nCalendar 再通过 OIDC 流程获取用户信息:
但是我这边已经在Dex 服务端做了全域 cookie,没必要再去获取了。
参考上面的流程图,直接就是携带 cookie 到后端去验证并解析 token 获取用户信息。
nCalendar 将使用 cookie id_token 中的信息建立用户会话(自身的token)并显示头像、昵称等。
📌
PS:对于首次通过第三方登录注册的账号,由于无法同步获取密码信息,用户需要先在 nCalendar 的个人信息页面手动设置密码,之后才能在 PC 或移动端使用账号密码登录。

✅ 总结

通过本文指引,我们已经完成了:
  1. 🔧 在 GitHub 创建 OAuth 应用,获取登录凭据;
  1. 🛠️ 配置 Dex 连接 GitHub,作为统一身份认证入口;
  1. 🧩 在 Dex 中注册 nCalendar 为 OAuth 客户端
  1. 🔐 实现通过 Dex 登录 GitHub,回调 nCalendar 完成登录流程
  1. 📥 在 nCalendar 中安全获取并识别用户信息(如昵称、邮箱、头像)。
借助 Dex,我们无需让 nCalendar 直接对接多个第三方平台,只需配置一次,即可实现标准化、集中化的用户登录管理。
这不仅提升了登录体验,还为组织提供了更高的安全性与审计能力 —— 是向统一身份认证(SSO)架构演进的重要一步。
💡
有关文章的任何疑问,欢迎您在底部评论区留言,一起交流~
若文章对您有帮助,欢迎 请我喝杯咖啡~
上一篇
Nginx+ACME服务器搭建
下一篇
三步快速生成本地开发证书(mkcert)

评论
Loading...