typecho-oidc:基于 OIDC/OAuth2 的 Typecho 登录插件
https://git.jetsung.com/jetsung/typecho-oidc
基于 OIDC/OAuth2 的 Typecho 登录插件,支持 Authelia、Keycloak 等 OIDC Provider。
功能特性
- 支持 OIDC 发现文档自动获取端点
- 支持手动配置 Authorization/Token/Userinfo URL
- 支持账户映射规则
- 支持用户名或邮箱方式登录
- 登录页面按钮自动渲染
安装
- 下载或克隆本插件到 Typecho 的
usr/plugins/OIDC 目录
- 在后台启用插件
- 配置插件参数
快速开始
1. 服务端配置
在 OIDC Provider(如 Authelia)中创建客户端:
- 回调地址:
https://your-site.com/oidc/callback
- 授权类型:Authorization Code
- 客户端认证方式:Client Secret Post
2. 插件配置
两种配置方式(二选一):
方式一:使用 OIDC 发现文档(推荐)
OIDC 发现文档:https://auth.example.com/.well-known/openid-configuration
填写后发现文档后,下方的 Authorization/Token/Userinfo URL 会自动获取。
方式二:手动配置
Authorization URL:https://auth.example.com/oauth2/authorize
Token URL:https://auth.example.com/oauth2/token
Userinfo URL:https://auth.example.com/oauth2/userinfo
3. 账户关联方式
选择登录凭证类型:
| 方式 | 说明 | 匹配字段 |
| 用户名 | 使用 OAuth 返回的用户名登录 | Typecho 用户名 |
| 电子邮箱 | 使用 OAuth 返回的邮箱登录 | Typecho 邮箱 |
4. 账户映射规则(可选)
格式:Typecho 账户 = OAuth 账户,每行一个规则。
留空时: 自动尝试用户名和邮箱匹配
- 先用 OAuth 用户名匹配 Typecho 用户名
- 若未匹配,再用 OAuth 邮箱匹配 Typecho 邮箱
填写时示例:
# 不含 = 号时,视为相同(如 admin = admin)
admin
user@example.com
# 含 = 号时,左侧 Typecho 账户,右侧 OAuth 账户
admin = jetsung # OAuth 返回 jetsung,用 admin 登录
admin@example.com = hello@world.com # OAuth 返回 hello@world.com,用 admin@example.com 登录
详细配置说明
| 参数 | 说明 | 必填 |
| Client ID | OAuth2 客户端 ID | 是 |
| Client Secret | OAuth2 客户端密钥 | 是 |
| OIDC 系统名称 | 显示名称,用于标识(如 Authelia) | 否 |
| OIDC 发现文档 | .well-known/openid-configuration 地址 | 否* |
| Authorization URL | 授权端点 URL | 否* |
| Token URL | 令牌端点 URL | 否* |
| Userinfo URL | 用户信息端点 URL | 否* |
| Scope | 默认为 openid email profile | 否 |
| 按钮文本 | 登录按钮显示文字 | 否 |
| 账户关联方法 | 用户名 或 电子邮箱 | 是 |
| 账户映射规则 | 账户映射配置(留空自动匹配) | 否 |
*说明:发现文档与下方三个 URL 至少填写一种,若都填则优先使用发现文档。
常见问题
Q: 登录失败,提示"该用户不存在"
A: 检查账户映射规则是否正确配置,或 Typecho 中是否存在对应的用户。
Q: 登录失败,提示"获取访问令牌失败"
A: 检查 Client ID、Client Secret 是否正确,回调地址是否与服务端配置一致。
Q: 登录按钮没有显示
A: 检查是否已填写发现文档或 Authorization URL,以及 Client ID 是否已配置。