ウェブサイトでのMillidaログイン
「Millidaでログイン」ボタンを接続し、ウェブサイトの訪問者がMillidaアカウントでログインできるようにします。アプリケーションの登録、認可フロー、トークン検証について説明します。
更新日 2026年9月7日
MillidaはIDプロバイダーとして機能します。訪問者があなたのサイトで「Millidaでサインイン」をクリックし、データ転送に同意すると、認証済みの状態で戻ってきます。OpenID Connectで動作するため、Google、Apple、Discordでのサインインと同じように、既製のOIDCライブラリがそのまま使えます。
公開されるのは本人性に関する情報だけです。Minecraftのニックネーム、名前、アバター、そしてあなたが要求し、本人が同意した場合はメールアドレス、スキン、連携済みのDiscordとTelegram、プラットフォーム上の評価です。残高、取引、サーバーはアプリケーションからは利用できません。
必要な作業
1. アプリケーションを作成する
プロフィール → APIとWebhook → 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の識別子と@name |
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分です。再交換は漏えいの兆候とみなされ、アプリケーションのアクセスが完全に取り消されます。
取り消し後にトークンが動作しなくなった — 本人がプロフィールのセキュリティ設定でアプリケーションを無効にしたためです。これは想定どおりの動作です。もう一度サインインするよう案内してください。
本人がアクセスを取り消す方法
プロフィール → セキュリティ → 「連携済みアプリケーション」 → 「取り消す」。アクセスは即座に停止し、発行済みのトークンはすべて無効になります。