OAuth認証

OAuth 認証の流れ

Mobage RESTful API を利用するためには、ゲームサーバーとユーザーは Mobage プラットフォームと認証を行わなければなりません。Mobage は OAuth 認証を採用しています。下図に OAuth 認証の流れが示されています。
 

OAuth 認証に関わる登場人物は、下記のようです。

登場人物

説明

Game

iOS や Android で実行されているゲームクライアントのこと。

Game Server

上記 Game がアクセスするゲームサーバー。ただのデータストアとして動作するゲームサーバーもありますが、プログラム(スクリプト)を実行可能で Mobage プラットフォームに接続できることが必須条件になります。

Mobage Platform

RESTful API を提供する Mobage プラットフォーム。

Mobage SDK

上記 Game 内に組み込まれた Mobage SDK のこと。

1-4. Temporary Credentials の取得

ユーザが Game にログインした後、必要なタイミングで OAuth 認証を始めることができます。まず、Game は Game Server に対して Temporary Credential を取得リクエストを送信します。Game Server は Mobage プラットフォームに対して署名付きのリクエストを送信します。Mobage プラットフォームは、Temporary Token と Temporary Token Secret を Game Server に返します。Game Server は Temporary Token のみを Game に返します。
 
なお、署名に関しては下記「リクエストの署名」をご参照下さい。

セキュリティ上問題になりますので、必ず Temporary Token のみを返し、Temporary Token Secret は返さずに Game Server 上に保存して下さい。
次に、Temporary Token を認証することによって Token と特定のユーザと関連づけさせます。ユーザがログインされている状態で、下記 Mobage SDK が提供する API を呼び出して下さい。Mobage SDK は Mobage プラットフォームと通信し、Verifier という文字列を Game に返します。

SDK

OS

Temporary Token を承認する API

Mobage Native SDK

Android

com.mobage.android.social.common.Auth.authorizeToken

 

iOS

[MBGSocialAuth authorizeToken:onSuccess:onError:]

Mobage Unity SDK

Common

MobageAuth::authorizeToken

Mobage ngCore SDK

Common

Social.Common.Auth.authorizeToken

9-12. Access Token Credentials の取得とセッション ID

Game は、上記 Temporary Token の承認により発行された verifier 文字列を Game Server に送信します。Game Server は受信した verifier を含めたリクエストを Mobage プラットフォームに署名付きで送信します。Verifier 文字列に問題がなければ、Mobage プラットフォームはユーザとバインドされた Access Token、Access Token Secret および OAuth2 Token を Game Server に返します。
 
なお、署名に関しては下記「リクエストの署名」をご参照下さい。

セキュリティ上問題になりますので、Game には各種 Token、Secret を渡さずに、その代わりに独自にセッション ID を発行しそれを返して下さい。
また、ログインしたユーザの特定はクライアントから送信されるUser IDを信用せずに、People API でユーザを特定して下さい。詳細についてはこちらのチュートリアルを参照して下さい。

Token CreToken Credential (oauth_token, oauth2_token) の管理は、Mobage の UserID 単位で行わず、必ずセッション ID 等のセッション単位で行って下さい。
不適切な事例として、以下の様なものがあります。

  • 条件
    • Token Credential を UserID 単位でデータベースに格納している。
    • Android と iOS で起動時に 3-legged 認証を行い、データベース上の Token Credential を上書きしている。
  • 上記条件を満たす場合に、以下の挙動を行った場合
    • iOS で一旦ゲームを起動してサスペンド状態にした後に、Android でゲームを起動し、再度 iOS でレジュームしゲームを進めた。
  • 発生する不具合
    • iOS 側でアイテムを購入したが、iOS のゲームポイントの残高が減らず、Android のモバコイン / ゲームポイントの残高が減少する。
    • Google Play 版側でアイテムを購入したが、Android ゲームポイントの残高が減らず、Android のモバコインの残高が減少する。

Mobage オープンプラットフォームでは、デバイスの区別は Token Credential に紐付いて行われます。そのため、どちらかのデバイスを使って発行した Token Credential はデバイス間で共有することができません。セッション ID ごとに Token Credential が管理されているのであればこのような心配も無くなりますので、適切な実装をお願いします。

 

Token Credentialの有効期限

Token Credentialの有効期限は発行後24時間です。
ただし、ユーザーの乗っ取り行為など何らかの不正行為が発覚し、プラットフォームとして対処すべきと判断された場合には、任意のタイミングでサーバ側で破棄することがあります。
また、Token Credential の有効期限が切れた場合は Platform からの応答が status code 401 となります。Platform から status code 401 が返ってきた場合は もう一度始めから 3-legged 認証処理を行って Token Credenatial を取得する ように実装をお願い致します。

13-16. セッション ID を用いたリクエストの送信

Game は発行されたセッション ID を用いて Game Server と通信できます。必要に応じて、Game Server はそのセッション ID にバインドされた Token Credentials で Mobage RESTful API を呼び出します。ここでもやはりリクエストの署名が必要になります。
 
Mobage プラットフォームは RESTful API の呼び出し結果を Game Server に返し、Game Server はそれを処理して Game に返します。
 
なお、署名に関しては下記「リクエストの署名」をご参照下さい。
 

リクエストの署名

Mobage プラットフォームは、リクエストの正当性(承認された Game Server から来ているかどうか)を判別するために、リクエストヘッダーに付属された署名を確認します。API によって、下記の 3 種類の署名方法があります。

  • 2-legged(Trusted モデル)
  • 3-legged(Proxy モデル)
  • OAuth2
リクエストの署名に関する詳細は、リクエストの署名をご参照下さい。

PREVIOUS

RESTful APIエンドポイント

NEXT

リクエストの署名