- #教程
- #Memos
- #Casdoor
如果你在自建 Memos 的过程中想要接入统一认证,Casdoor 是一个不错的选择。它支持标准 OAuth 2.0 / OIDC 流程,而 Memos 刚好提供了自定义 OAuth 的配置入口,两者对接起来并不复杂。这篇文章记录一下具体的配置过程,特别是几个容易踩坑的字段映射。
前提条件
- Casdoor 实例已部署并可访问,假设地址为
https://casdoor.example.com - Memos 实例已部署并可访问,假设地址为
https://memos.example.com - 已在 Casdoor 中创建了 Application,并拿到了:
- Client ID
- Client Secret
Casdoor Application 配置
登录 Casdoor → 进入 Applications → New Application(或编辑已有的)。
需要关注的几个地方:
- Redirect URI 填 Memos 的回调地址:
https://memos.example.com/auth/callback - Scope 填:
这三个 scope 能让 Casdoor 返回用户名、邮箱、显示名和头像信息。
openid profile email - 记下 Client ID 和 Client Secret,后面在 Memos 里要用。
Memos 自定义 OAuth 配置
进入 Memos → 设置 → 自定义 OAuth,按下表填写:
| Memos 字段 | 填写内容 |
|---|---|
| 模板 (Template) | Custom |
| 名称 (Name) | Casdoor Auth |
| 客户端 ID (Client ID) | <你的 Casdoor Client ID> |
| 客户端密钥 (Client Secret) | <你的 Casdoor Client Secret> |
| 重定向链接 (Redirect URI) | https://memos.example.com/auth/callback |
| 授权端点 (Authorization Endpoint) | https://casdoor.example.com/login/oauth/authorize |
| 令牌端点 (Token Endpoint) | https://casdoor.example.com/api/login/oauth/access_token |
| 用户端点 (User Endpoint) | https://casdoor.example.com/api/userinfo |
| 范围 (Scope) | openid profile email |
| 标识符 (Identifier) | preferred_username |
| 显示名称 | name |
| 邮箱 | email |
| 头像 URL (Avatar URL) | picture |
几个需要注意的点:
- Avatar URL 必须填
picture。Casdoor 的/api/userinfo接口返回的头像字段叫picture(遵循 OIDC 标准),填错了头像就显示不出来。 - 标识符用
preferred_username。Casdoor 的 UserInfo 接口遵循 OIDC 标准,用户名字段返回为preferred_username(对应 Casdoor 内部的Name),Memos 用它来唯一标识用户。 - 显示名称用
name。OIDC 标准中name对应的是用户的显示名称(即 Casdoor 内部的DisplayName),登录后 Memos 界面上显示的昵称就取这个值。
测试登录
配置保存之后走一遍完整流程验证:
- 打开 Memos 登录页面,应该能看到一个 Casdoor Auth 的登录按钮。
- 点击后跳转到 Casdoor 的登录页面。
- 在 Casdoor 完成登录(账号密码、或者其他已配置的登录方式)。
- 登录成功后自动跳回 Memos,检查用户信息是否正确同步:
- 用户名 → 取自
preferred_username - 昵称 → 取自
name - 邮箱 → 取自
email - 头像 → 取自
picture
- 用户名 → 取自
如果头像没有显示,先确认 Casdoor 里对应用户确实设置了头像,再检查 Avatar URL 字段是不是填成了别的值。
小结
整个对接过程不算复杂,主要就是 Casdoor 端的 Redirect URI 和 Scope 别漏填,Memos 端的字段映射别搞混。因为 Casdoor 的 /api/userinfo 接口返回的是 OIDC 标准字段,和 Casdoor 后台看到的内部字段名不一样,最容易踩的坑就是把标识符填成 name(OIDC 里 name 其实是显示名称)、或者把头像填成 avatar 而非 picture。
配好之后 Memos 就能通过 Casdoor 实现统一登录了,用户信息(用户名、昵称、邮箱、头像)也会在首次登录时自动同步过来。如果你的 Casdoor 还接了 GitHub、Google 之类的第三方登录,Memos 用户也可以间接享受到这些登录方式。
DISCUSSION
文章评论
昵称、头像与账号资料会自动同步,无需手动填写。