在您的网站上使用 Millida 登录
接入“使用 Millida 登录”按钮——让您网站的访客通过 Millida 账户登录。应用注册、授权流程、令牌验证。
更新于 2026年9月7日
Millida 可以作为身份提供方:访客在您的网站上点击“使用 Millida 登录”,确认数据传输后返回时即已完成身份验证。它基于 OpenID Connect 工作——就像使用 Google、Apple 或 Discord 登录一样——因此任何现成的 OIDC 库都可以使用。
仅暴露身份信息:Minecraft 昵称、姓名、头像,以及——如果您请求且对方同意——邮箱、皮肤、关联的 Discord 和 Telegram,以及平台上的声誉。余额、交易和服务器对应用不可见。
您需要做什么
1. 创建应用
个人资料 → API 和 webhooks → 使用 Millida 登录 标签页 → “创建应用”。
您需要准备:
- 名称——用户将在登录屏幕上看到它。他人应用的名称中禁止出现“Millida”一词。
- 重定向 URI——确认后将用户返回的位置。仅支持
https(开发时允许http://localhost)。它按完整字符串匹配:多一个斜杠或添加一个参数都会导致无法匹配。 - 隐私政策链接——用户将在向您传输数据之前看到它。
创建后,您将获得 client_id,如果是服务器应用,还会获得 client_secret。密钥仅显示一次——请立即保存。
应用类型:如果您有可以存储密钥的后端,选择 server;如果是 SPA 或移动应用且无处隐藏密钥,选择 public。
2. 向库指定提供方 URL
https://id.millida.net
这样就够了:库会自行读取 https://id.millida.net/.well-known/openid-configuration 并找到其余 URL。
3. 将用户引导至登录
https://id.millida.net/oauth/authorize
?response_type=code
&client_id=your_client_id
&redirect_uri=https://your-site.ru/auth/millida/callback
&scope=openid profile email
&state=random_string
&nonce=random_string
&code_challenge=base64url(sha256(code_verifier))
&code_challenge_method=S256
所有人都必须使用 PKCE,包括服务器应用。将 state 保存在会话中并在返回时验证——否则他人的响应可能被注入您的会话。
4. 用授权码换取令牌
POST https://id.millida.net/oauth/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic base64(client_id:client_secret)
grant_type=authorization_code&code=…&redirect_uri=…&code_verifier=…
响应中包含 access_token、id_token,如果您请求了 offline_access,还会包含 refresh_token。
5. 查明登录者身份
解析 id_token(对照 JWKS 验证签名、iss、aud、exp、nonce),或请求:
GET https://id.millida.net/oauth/userinfo
Authorization: Bearer <access_token>
您可以请求哪些数据
| 您请求的内容 | 您获得的内容 |
|---|---|
openid | sub——用户标识符,必填 |
profile | 昵称、姓名、头像、个人资料链接 |
email | 邮箱地址及其是否已验证 |
minecraft | Minecraft 昵称、其 UUID、版本,以及当前皮肤和披风的链接 |
discord | 关联 Discord 的标识符和名称 |
telegram | 关联 Telegram 的标识符和 @名称 |
reputation | 个人资料点赞数、成就数量、注册日期、已验证账户标记 |
offline_access | 在用户撤销之前刷新访问权限的权利 |
离线昵称没有 UUID——minecraft_uuid 将为空,而 minecraft_username 将从账户中填充。telegram_id 以字符串形式返回:Telegram 聊天 id 无法放入 JSON 精确数字中,将其作为数字解析会损坏末尾数字。
只请求登录正常工作所必需的内容:用户会在同意屏幕上阅读每一个额外项目,并可能当场改变主意。
关于用户标识符
对于同一个人,sub 在每个应用中各不相同。它对您的网站不可变,但与其他网站的 sub 不一致——您无法通过它跨应用匹配受众。
将 sub 存储为用户键。邮箱不适合用于此目的:它可以被更改。
应用验证
新应用可立即使用,但在登录屏幕上会标记为未验证。当网站准备就绪后,在控制面板中点击“提交审核”——我们会查看并移除该标记。
常见错误
“redirect_uri does not match any registered address”——地址按完整字符串匹配。请检查末尾斜杠、协议和端口。
“Only code_challenge_method=S256 is supported”——必须使用 PKCE,不接受 plain。
“The authorization code has already been used”——授权码是一次性的,有效期为 1 分钟。重复交换被视为泄露迹象,并会完全撤销该应用的访问权限。
撤销后令牌停止工作——用户在个人资料安全设置中禁用了该应用。这是预期行为:请引导他们重新登录。
用户如何撤销访问权限
个人资料 → 安全 → “已连接的应用” → “撤销”。访问会立即停止,所有已签发的令牌都会失效。