mixi Developer Center (ミクシィ デベロッパーセンター)

mixiアプリ

mixiアプリ » 技術仕様(新方式) » モバイル » 2-legged OAuthによるAPIアクセス

2-legged OAuthによるAPIアクセス

mixiアプリにて利用可能なRESTful APIへアクセスするには、2-legged OAuthによる適切な署名が必要です。

RESTful APIへのアクセスに必要な情報

oauth_consumer_key 事前に発行されたconsumer_keyを設定
oauth_nonce ランダムな文字列。必ずリクエストごとに違う値を設定してください。
oauth_signature APIリクエストの妥当性を検証するための署名で、生成方法については次項を参照ください。
oauth_signature_method 署名方式。’HMAC-SHA1′固定
oauth_timestamp UNIXタイムスタンプ。時刻がずれているとエラーになるので、サーバの時刻設定を確認ください。
oauth_version 1.0
xoauth_requestor_id (モバイル版アプリ)リクエストパラメータとして送られてくるopensocial_owner_idを設定
(PC版アプリ)ViewerのIDを設定

OAuth Signatureの生成方法

RESTful APIの利用に必要なOAuth Signatureの生成方法を以下に説明します。
Signature Methodは、現在、HMAC-SHA1のみ対応しています。

まず、署名生成に必要なベース文字列を生成するために次の値を用意します。

  1. HTTPリクエストメソッド(GETやPOSTなど)
  2. 実際にリクエストが送信されるAPI URL。クエリーパラメータは含めないようにします。
  3. OAuthの処理に必要な各種パラメータを設定します。クエリーパラメータはこちらに含めます。パラメータの順序は、予めパラメータ名のアルファベット順にソートしておく必要があります。

例えば、下記のような値を用意します。

  1. GET
  2. http://api-example.mixi.jp/people/@me/@self
  3. oauth_consumer_key=bc906fac81f581c3c96a&oauth_nonce=5c261539688b2a591aad&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1244636076&oauth_version=1.0&xoauth_requestor_id=xxxxxxxx

これらをURIエスケープした後に & で連結して、ベース文字列を生成します。

GET&http%3A%2F%2Fapi-example.mixi.jp%2Fpeople%2F%40me%2F%40self&oauth_consumer_key%3D
bc906fac81f581c3c96a%26oauth_nonce%3D5c261539688b2a591aad%26oauth_signature_method
%3DHMAC-SHA1%26oauth_timestamp%3D1244636076%26oauth_version%3D1.0%26xoauth_requestor_id
%3Dxxxxxxxx

そして、このベース文字列をHMAC-SHA1によってダイジェスト値を生成し、BASE64でエンコードすることによってSignatureを生成します。この際、利用する共有キーはconsumer_secretと空のToken Secretを&で連結したものになります。consumer_secretはアプリケーション登録時に発行されたものを利用します。例えば、consumer_secretが79e0a55cde43e7dc86fd1e1366d6bd6ac7771db8なら79e0a55cde43e7dc86fd1e1366d6bd6ac7771db8&になります。こうして、シグニチャは以下のようになります。

TmihyproUc02HOh17W0uz++WdYM=

こうして生成されたパラメータをAuthorizationヘッダに追加して、APIリクエストを送信します。

GET http://api-example.mixi.jp/people/@me/@self?xoauth_requestor_id=xxxxxxxx
Authorization: OAuth
oauth_consumer_key="bc906fac81f581c3c96a",
oauth_signature_method="HMAC-SHA1",
oauth_signature="TmihyproUc02HOh17W0uz%2B%2BWdYM%3D",
oauth_timestamp="1244636076",
oauth_nonce="5c261539688b2a591aad",
oauth_version="1.0"

上記のconsumer_key, consumer_secretはサンプルであり、実際のAPIアクセスには利用できません。また、consumer_secretについては、絶対に外部に漏らさないようにしてください。

より詳細な仕様については、OAuth Consumer Request 1.0 Draft 1を参照ください。

エラー発生の原因について

2-legged OAuthでのリクエストに関して、oauth_nonceやoauth_timestamp、署名の検証などに関してチェックが行われます。その結果エラーとして判断された際には、HTTPステータスコードとして400系や500系のコードが返却されることになります。また、WWW-Authenticateレスポンスヘッダ内のパラメーターによってエラーの種類と原因を特定できます。

エラーの種類と原因は、以下の仕様に従ってレスポンスに含まれることになります。

Extension: OAuth Problem Reporting
http://oauth.pbworks.com/ProblemReporting

具体的なエラーの記載は、例えば以下のようになります。

  • oauth_nonceの重複が検出されたとき: oauth_problem=nonce_used
  • oauth_timestampが不正だったとき: oauth_problem=timestamp_refused&oauth_acceptable_timestamps=(許容開始時刻)-(許容終了時刻)

参考文献

OAuth Consumer Request 1.0 Draft 1
http://oauth.googlecode.com/svn/spec/ext/consumer_request/1.0/drafts/1/spec.html
December 2007.
OAuth Problem Reporting http://oauth.pbworks.com/ProblemReporting

このページの上部へ