Skip to content
開発者向け · Millidaでサインイン

ウェブサイトでの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>

要求できるデータ

要求するもの取得できるもの
openidsub — ユーザー識別子、必須
profileニックネーム、名前、アバター、プロフィールへのリンク
emailメールアドレスと、それが確認済みかどうか
minecraftMinecraftのニックネーム、その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分です。再交換は漏えいの兆候とみなされ、アプリケーションのアクセスが完全に取り消されます。

取り消し後にトークンが動作しなくなった — 本人がプロフィールのセキュリティ設定でアプリケーションを無効にしたためです。これは想定どおりの動作です。もう一度サインインするよう案内してください。

本人がアクセスを取り消す方法

プロフィール → セキュリティ → 「連携済みアプリケーション」 → 「取り消す」。アクセスは即座に停止し、発行済みのトークンはすべて無効になります。