Login with minecraft.jp

minecraft.jpのAPIでは認可(Authorization)のためにOAuth 2.0を使用しています。OpenID Connectに対応していますので認証(Authentication)に使用する事も出来ます。

この機能を利用する事でWebサイトや、スマートフォンアプリケーションにminecraft.jpアカウントの認証を組み込む事が出来ます。

いくつかのWebアプリケーション、CMSにはプラグインがありますのですぐに利用可能です。

SDKやライブラリが利用可能な場合は、下記の手順よりも簡単にログイン機能を実装する事が出来ます。

OAuth 2.0の準備

Login with minecraft.jpをあなたのアプリケーションで使用する前にApp ConsoleからOAuth 2.0のアプリ登録を行う必要があります。

OAuth 2.0アプリの登録

  • App Consoleを開きます。
  • 新規アプリ登録をクリックして、アプリ用のキーを取得します。 アプリケーションタイプはスマートフォンアプリなどはインストールアプリケーション、ブラウザ側で実行されるアプリケーション(JavaScript)などはWebアプリケーション、 Webサーバ側で実行されるアプリケーションなどはサービスアプリケーションを選択してください。
  • Redirect URIにはminecraft.jpから認証応答が戻って来ますので、あなたのアプリケーションURIを指定します。

ユーザの認証

認証フロー

  • nonceの生成
  • 認証リクエストをminecraft.jpに送信
  • codeをAccess Token及びID Tokenに交換
  • ID Tokenを検証
  • ユーザの認証

OpenID Connect Flow

nonceの作成

認証リクエストにはReply Attack攻撃を防ぐためにnonceを追加する必要があります。nonceは後ほど検証する必要がありますのでセッションなどに保管してください。

PHP

$_SESSION['nonce'] = sha1(openssl_random_pseudo_bytes(24));

認証リクエストをminecraft.jpに送信

認証リクエストURIを作成し、ブラウザにリダイレクトさせます。認証リクエストEnd Point URIはhttps://minecraft.jp/oauth/authorizeです。

リクエストには次のパラメータを指定します。

フィールド名 説明
client_id App Consoleから取得したClient IDです。
response_type code固定です。
scope 通常のリクエストではopenid profile emailを指定します。
redirect_uri あなたのサーバの認証応答受け取り用エンドポイントです。App Consoleの設定と一致させる必要があります。

認証リクエストURIのサンプルはこのようになります。

https://minecraft.jp/oauth/authorize?client_id=d95119dcd37b33ccb7c8&response_type=code&scope=openid%20profile%20email&redirect_uri=https://www.example.net/login/

codeをAccess Token及びID Tokenに交換

認証応答は認証リクエストで指定したredirect_uriに送信されます。認証応答はURLクエリとして返されます。

Example

https://www.example.net/login/?code=d895ec385449852e6b87a718b8b44e3b73299440

ここで送信されたcodeをToken Endpointに送信し、Access Token及びID Tokenを取得します。Token End Point URIはhttps://minecraft.jp/oauth/tokenです。

リクエストには次のパラメータを指定します。

フィールド名 説明
client_id App Consoleから取得したClient IDです。
client_secret App Consoleから取得したClient Secretです。サービスアカウント指定時のみ追加します。
grant_type authorization_code固定です。
code 認証応答で取得したcodeを指定します。
redirect_uri App Consoleで指定したRedirect URIです。

リクエストのサンプルはこのようになります。

POST /oauth/token HTTP/1.1
Host: minecraft.jp
Content-Type: application/x-www-form-urlencoded

client_id=d95119dcd37b33ccb7c8&
client_secret={CLIENT_SECRET}&
grant_type=authorization_code&
code=d895ec385449852e6b87a718b8b44e3b73299440&
redirect_uri=https://www.example.net/login/

リクエストが成功するとJSONオブジェクトとして次の応答が返されます。

フィールド名 説明
access_token minecraft.jp APIへのリクエストに使用するAccess Tokenです。
expires_in アクセストークンの有効期限です。
token_type トークンのタイプです。常にBearerです。
scope アクセストークンでアクセス可能なスコープです。
refresh_token アクセストークンの更新に使用するトークンです。
id_token JWT形式でminecraft.jpによってデジタル署名されたユーザ情報です。

ID Tokenを検証

ID Tokenは署名されたJSON ObjectがBASE 64形式でエンコードされています。ID Tokenを認証に利用するにはID Tokenの内容を検証する必要があります。

ID Tokenペイロードサンプル

{
    "iss": "minecraft.jp",
    "sub": "1",
    "aud": "d95119dcd37b33ccb7c8",
    "iat": 1403807439,
    "exp": 1403811039,
    "auth_time": 1403807439,
    "nonce": "0b478ee46e666c64886978938c70a75a266427fd"
}
フィールド名 説明
iss ID Tokenの発行元です。
sub ユニークなminecraft.jp上のIDです。ユーザの識別に利用する事が出来ます。
aud あなたのアプリケーションのClient IDです。
iat ID Tokenが発行された時間のUnix Timestampです。
exp ID Tokenの有効期限のUnix Timestampです。
auth_time 認証が行われた時間のUnix Timestampです。
nonce 最初の認証リクエストで指定したnonceです。

ID Tokenの検証にはOpenID Connect Core 1.0 日本語訳などをご覧ください。 Token Info EndpointにID Tokenを送信する事によりminecraft.jp上で検証する事も可能です。

リクエストのサンプルはこのようになります。

GET /oauth/tokeninfo?id_token=eyJ0eXAiOiJKV1QiLCJqa3UiOiJodHRwczpcL1wvbWluZWNyYWZ0LmpwXC9vYXV0aFwvandrcyIsImtpZCI6IjEyNjA0MTc0OTA5MDYyMzQyNTkyIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJtaW5lY3JhZnQuanAiLCJzdWIiOiIxIiwiYXVkIjoiZDk1MTE5ZGNkMzdiMzNjY2I3YzgiLCJpYXQiOjE0MDM4MDc0MzksImV4cCI6MTQwMzgxMTAzOSwiYXV0aF90aW1lIjoxNDAzODA3NDM5LCJub25jZSI6IjBiNDc4ZWU0NmU2NjZjNjQ4ODY5Nzg5MzhjNzBhNzVhMjY2NDI3ZmQifQ.wjL_kE4U_YER8Y7DWob4a-oLx6a3jeHH7NL2cei-C2HH39Yt5VzvkBCsVylih06cnR90hb_FIMMtg7Ow28zObXWkLZKQu5UgFmg2y6EU2MU0RGIMckfKOdNpgR6_6vCNA6e9AmAPwYbOxKTRWGpYMEmy5WZ5v858K0hPHhvzXp2YL-kzRWB3c3tXc0UQwFy4K0l_SJjZAHiDc2dsHzgH-eb62oPFTV8SyGDb1LZvb_cQZtVakoDosGJO98lkpDYdCs9TnOcVILgAvIDwV7mKDQqvfr9n-ORNfXNIAdxmTJLhdHR6nHvSWkZbKTLzJNoZlkdd4RT9xt6hWr_GhS_k6A HTTP/1.1
Host: minecraft.jp

リクエストが成功するとID Tokenの検証結果がJSONオブジェクトとして返却されます。

フィールド名 説明
issuer ID Tokenの発行元です。
issued_to ID Tokenの発行先Client IDです。
audience ID Tokenの発行先Client IDです。
user_id minecraft.jp上のユニークなユーザIDです。
expires_in ID Tokenの有効期限までの時間です。(秒)
issued_at ID Tokenの発行された時間のUnix Timestampです。

ユーザの認証

ユーザの情報を取得するにはUserInfo Endpointにリクエストを送信します。UserInfo EndpointのURIはhttps://minecraft.jp/oauth/userinfoです。 リクエストにはAccess Tokenが必要です。

リクエストのサンプルはこのようになります。

GET /oauth/userinfo HTTP/1.1
Host: minecraft.jp
Authorization: Bearer 28c6c045a46465ce6ad6383b53775c25f4ee1800

リクエストが成功するとJSONオブジェクトとして次の応答が返されます。

フィールド名 説明
preferred_username minecraft.jp上のユーザ名及びMinecraftのアカウント名です。
profile minecraft.jp上のプロフィールURLです。
uuid MinecraftアカウントのUUIDです。
email minecraft.jp上に登録されているメールアドレスです。
email_verified メールアドレスが確認済みである事を示します。
sub minecraft.jp上のユニークなIDです。

サンプルアプリケーション