Skip to content
面向开发者 · 使用 Millida 登录

在您的网站上使用 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>

您可以请求哪些数据

您请求的内容您获得的内容
openidsub——用户标识符,必填
profile昵称、姓名、头像、个人资料链接
email邮箱地址及其是否已验证
minecraftMinecraft 昵称、其 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 分钟。重复交换被视为泄露迹象,并会完全撤销该应用的访问权限。

撤销后令牌停止工作——用户在个人资料安全设置中禁用了该应用。这是预期行为:请引导他们重新登录。

用户如何撤销访问权限

个人资料 → 安全 → “已连接的应用” → “撤销”。访问会立即停止,所有已签发的令牌都会失效。