認証 (Xbox Live / PlayFab)
Minecraft Bedrock Edition の公式サーバーや外部のオンライン認証有効サーバー、Realms に接続する場合、Microsoft アカウント(Xbox Live)による認証が必須となります。
gophertunnel/minecraft/auth パッケージは、デバイスコードフロー(ブラウザでコードを入力して承認する方式)によるトークン取得と自動リフレッシュ機能を提供します。
認証の流れ (デバイスコード認証)
最もシンプルな認証接続
auth.TokenSource を minecraft.Dialer に設定するだけで、初回実行時にターミナルへ承認用URLとコードが表示されます。
go
package main
import (
"fmt"
"log"
"github.com/sandertv/gophertunnel/minecraft"
"github.com/sandertv/gophertunnel/minecraft/auth"
)
func main() {
// auth.TokenSource を指定(コンソールにURLと認証コードが出力される)
dialer := minecraft.Dialer{
TokenSource: auth.TokenSource,
}
conn, err := dialer.Dial("raknet", "mco.mineplex.com:19132")
if err != nil {
log.Fatalf("接続エラー: %v", err)
}
defer conn.Close()
fmt.Printf("ログイン成功! プレイヤー名: %s, XUID: %s\n",
conn.IdentityData().DisplayName,
conn.IdentityData().XUID,
)
}トークンのファイルキャッシュ(永続化)
毎回ブラウザでコード認証するのは不便なため、取得した oauth2.Token を JSON ファイルなどに保存して再利用するのが定石です。
go
package main
import (
"encoding/json"
"errors"
"fmt"
"log"
"os"
"github.com/sandertv/gophertunnel/minecraft"
"github.com/sandertv/gophertunnel/minecraft/auth"
"golang.org/x/oauth2"
)
const tokenPath = "token.json"
func getTokenSource() (oauth2.TokenSource, error) {
// 1. 保存されたトークンファイルがあれば読み込む
tokenData, err := os.ReadFile(tokenPath)
if err == nil {
var tok oauth2.Token
if json.Unmarshal(tokenData, &tok) == nil {
// リフレッシュ可能なTokenSourceを作成
src := auth.RefreshTokenSource(&tok)
// 新しいトークンに更新されたら保存するラッパーを作ることも可能
return src, nil
}
}
// 2. なければ新規にデバイス認証を要求
fmt.Println("初回認証が必要です。画面の指示に従ってログインしてください:")
tok, err := auth.RequestLiveToken()
if err != nil {
return nil, fmt.Errorf("認証失敗: %w", err)
}
// トークンをファイルへ保存
data, _ := json.MarshalIndent(tok, "", " ")
_ = os.WriteFile(tokenPath, data, 0600)
return auth.RefreshTokenSource(tok), nil
}
func main() {
src, err := getTokenSource()
if err != nil {
log.Fatal(err)
}
dialer := minecraft.Dialer{
TokenSource: src,
}
conn, err := dialer.Dial("raknet", "play.cubecraft.net:19132")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
log.Printf("ログイン成功: %s", conn.IdentityData().DisplayName)
}PlayFab と 最新プロトコル認証
近年の Bedrock Edition では、Xbox Live 単体だけでなく PlayFab の Multiplayer Token が求められます。gophertunnel は内部でこれらを自動解決するため、ユーザー側は TokenSource を渡すだけで安全に接続できます。