Appearance
认证
配置密码登录,单点登录服务商 API 令牌。
Memos 支持三种主要的认证机制:
- 基于密码的注册和登录
- OAuth2 或是单点登录认证服务商
- 给 API 使用的个人访问令牌
会话模型
| 令牌类型 | 生命周期 | 存储方式 | 提示 |
|---|---|---|---|
| Access token (JWT) | 15 分钟 | 客户端的内存中 | 无状态 - 无需查询数据库即可验证 |
| Refresh token (JWT) | 30 天 | 只有 HTTP cookie | 基于数据库,可撤销 |
| 个人访问令牌 (PAT) | 用户自行选择 | 数据库内,SHA-256 哈希串 | 格式: memos_pat_<32 位随机串> |
PAT 的原始值只会在创建时显示一次,数据库中仅存储其 SHA-256 哈希值。
对于自动化工具和外部工具,建议使用个人访问令牌,而不是使用浏览器 cookie。
密码认证
密码认证是默认启用的,在单用户或是小型私有实例上,密码又简单又好用。
在以下情况中,密码认证方式通常是一个好的开始:
- 实例属于个人,或是非常小。
- 你没有中心的认证服务。
- 你希望本次安装尽可能简单一些。
禁用密码认证
当配置好单点登录后,管理员可以禁用普通用户的密码认证。除非你确定至少有一个单点登录服务可用,不然请勿禁用密码认证。
OAuth2 和单点登录
当你正在使用一个第三方的身份认证作为用户中心服务时,单点登录对一个团队型实例来说是一个很好的选择。在实例配置中配置好服务提供商,在强制整个实例仅可以使用单点登录之前,一定要先测试一下非管理员用户的单点登录是否可用。
OAuth2 服务提供商的字段
每个身份认证服务都需要如下字段:
- OAuth2 应用的
clientId和clientSecret、
- 服务商 OAuth2 端点的
authUrl、tokenUrl和userInfoUrl。
- 令牌所需要的
scopes。
fieldMapping将服务商商的用户信息字段映射到 Memos 所指定的字段(identifier、displayName、email、avatarUrl)
- 可选:
identifierFilter— 应用在身份信息上的正则表达式,不匹配正则的用户将被拒之门外。
Memos 实例的 OAuth2 回调 URL 是:https://<你的实例名>/auth/callback
GitHub
json
{
"title": "GitHub",
"type": "OAUTH2",
"config": {
"oauth2Config": {
"clientId": "<your-client-id>",
"clientSecret": "<your-client-secret>",
"authUrl": "https://github.com/login/oauth/authorize",
"tokenUrl": "https://github.com/login/oauth/access_token",
"userInfoUrl": "https://api.github.com/user",
"scopes": ["read:user", "user:email"],
"fieldMapping": {
"identifier": "login",
"displayName": "名字",
"email": "电子邮箱",
"avatarUrl": "用户头像"
}
}
}
}Google
json
{
"title": "Google",
"type": "OAUTH2",
"config": {
"oauth2Config": {
"clientId": "<your-client-id>",
"clientSecret": "<your-client-secret>",
"authUrl": "https://accounts.google.com/o/oauth2/v2/auth",
"tokenUrl": "https://oauth2.googleapis.com/token",
"userInfoUrl": "https://www.googleapis.com/oauth2/v2/userinfo",
"scopes": ["openid", "profile", "email"],
"fieldMapping": {
"identifier": "email",
"displayName": "名字",
"email": "电子邮箱",
"avatarUrl": "用户头像"
}
}
}
}个人访问令牌(PAT)
PAT 适用于脚本、外部系统的集成、或是外部工具。
通常在下列情景会使用到 PAT:
- 自动化脚本或程序中调用 API
- 与外部服务集成时
- 为了避免用户界面的的交互
操作指南
- 创建令牌时,尽可能缩小令牌的作用域
- 定期轮换
- 及时删除再也不会使用的令牌
- 不要将 PAT 写在用户端或前端代码中