Protocolにより規定された認可を行うことが求められます。この手順により、クライアントプログラムがどのようなAPIアクセスを行い、そしてどのような情報が参照または更新されるのか(これをスコープと呼びます)がユーザに提示されます。ユーザの認証、および提示されたスコープについてユーザが同意した場合にのみ、クライアントプログラムはAPIにアクセスするための情報(トークンなど)を得ることができます。draft-ietf-oauth-v2-10]http://openid-foundation-japan.github.com/draft-ietf-oauth-v2.ja.htmlここでは、APIを利用するために必要となる認証認可手順について説明いたします。Codeの入手リフレッシュトークン、アクセストークンの入手APIへのアクセスAPIアクセス時のエラーについてアクセストークンの再発行リフレッシュトークンの期限切れ事前に必要なもの認証認可手順を始めるためには、以下の情報をすでに入手している必要があります。(サービス登録後に発行されたもの)これらを入手するためには、サービス管理のページをご覧ください。最初にクライアントプログラムは、Webブラウザにて以下のURLにアクセスします。http://m.mixi.jp/connect_authorize.plその際に指定しなければならないクエリーパラメータは以下となります。ユーザの認可後に行われるリダイレクト時にこの値が含まれます。アプリケーションがセッションを持つ場合、このパラメータを使用してセッションが維持されている事を確認してください。scopeパラメータ値は、認可したいスコープを空白区切りで列挙した文字列を指定します。指定可能なスコープは、各APIの説明ページを参照ください。displayパラメータは、クライアントプログラムのデバイスによって指定する値を使い分けます。指定可能なパラメータ値は、以下となります。PCデスクトップ向け画面が表示されます。スマートフォン向け画面が表示されます。iOSの場合に指定します。Appleの審査を通過するために、このパラメータを使用してください。利用デバイスが携帯電話端末だった場合は、displayパラメータの指定は無視され、携帯電話端末向け画面が表示されます。その際、Docomo携帯端末の場合は、クエリパラメータとして「guid=ON」を付与してください。stateパラメータを利用したセッション維持の確認がされない場合、アプリケーションにCSRF脆弱性が存在する事になります。これを防ぐために、セッションIDのハッシュ値等をstateパラメータに含めて下さい。ユーザ認可後のリダイレクト時に、セッションとstateパラメータの組み合わせが正しいことを確認してください。詳しくは下記URLをご参照ください。http://openid-foundation-japan.github.io/rfc6749.ja.html#CSRF全てのパラメータ値は、URLエンコード済みの文字列を指定します。全体のURLは以下のようになるでしょう。https://mixi.jp/connect_authorize.pl?client_id=908ed4da74f885a2ab&response_type=code&scope=r_profile%20r_voice&state=5c1b3eea390b53f54ad0975e9a4bbba2各パラメータ値が正しければ、Webブラウザ上には認証または認可画面が表示されます。認証画面は、ユーザがすでに”http://mixi.jp/”または”https://mixi.jp/”にて最近ログインを行っていた場合は表示されません。携帯電話端末の場合について、ユーザがかんたんログインを設定していない場合は、その旨の案内ページが表示されます。認可画面には、先ほどscopeパラメータで指定したスコープの一覧が表示され、ユーザはクライアントプログラムが表示された処理をすることに同意するか選択します。URLにリダイレクトされます。その際、クエリパラメータとしてcodeパラメータが付与されます。stateパラメータを指定していた場合は、クエリパラメータとしてその値も含まれます。リダイレクト時のURLは、例えば以下のようになります。Codeの有効期限は3分となります。Codeを利用して、リフレッシュトークンおよびアクセストークンを入手します。そのために、クライアントプログラムは”https://secure.mixi-platform.com/2/token”にPOSTにてアクセスします。その際、以下のパラメータをリクエストボディにapplication/x-www-form-urlencoded形式で指定します。Code全体のURLおよびリクエストボディは以下のようになるでしょう。https://secure.mixi-platform.com/2/tokengrant_type=authorization_code&client_id=908ed4da74f885a2ab&client_secret=9720b4826e90ad9f053a57500d3a8c697c01d1&code=347ab1db9398d60b5ef3515e672d1e各パラメータが正しければ、レスポンスとして以下のような結果が返却されます。結果の形式は、application/jsonとなります。r_voice"}それぞれの値の意味は、以下となります。発行されたアクセストークンの有効期限は15分間となります。リフレッシュトークンおよびアクセストークンの有効期間は、事前の予告なく変更する場合があります。そのため、これらの有効期間をクライアントプログラムにハードコーディングする、あるいはこれらの有効期間に基づく設計を行うことは避けるようお願いいたします。リクエストボディに指定したパラメータが不正であれば、リフレッシュトークンおよびアクセストークンは取得できません。その際、application/json形式のエラーメッセージが返されます。エラー内容は下記の通りです。grant_type値が不正であるAPIへのアクセス入手したアクセストークンを使用して、各種APIにアクセスすることができます。利用可能なAPIは、認可手順の際に指定したスコープに限定されます。各APIを利用するためのURIはそれぞれ異なりますが、アクセストークンの指定は共通です。Authorizationリクエストヘッダにアクセストークンを指定します。以下のようになるでしょう。空白入れた後にアクセストークンを記述します。c2be2257f3dae3df4efcb010ae6eeaもしAuthorizationリクエストヘッダが使用できない状況の場合は、oauth_tokenパラメータにアクセストークンを指定することも可能です。APIを利用する場合には、以下のようになるでしょう。https://api.mixi-platform.com/2/people/@me/@self?oauth_token=c2be2257f3dae3df4efcb010ae6eea通常はAuthorizationリクエストヘッダにてアクセストークンを指定するようにしてください。APIアクセス時のエラーについてAPIへのアクセスの際に使用したアクセストークンが以下のような理由により無効だった場合、APIの呼び出しは失敗し、エラー内容がレスポンスとして返却されます。アクセストークンの有効期限切れ必要なスコープが認可されていないこの場合、HTTPレスポンスヘッダにエラー内容を示す”WWW-Authenticate”ヘッダが含まれます。error='expired_token',realm='api.mixi-platform.com'errorの値としては、以下の種類があります。場合は「アクセストークンの再発行」を参考に再発行リクエストを発行してください。Codeの入手」からやり直してください。発行されたアクセストークンの有効期限は短く、その有効期限を越えたアクセストークンを使用しても各APIへのアクセスは失敗します。クライアントプログラムは、リフレッシュトークンを使って、アクセストークンの再発行を行うことが可能です。リフレッシュトークンは、アクセストークンの発行時に含まれるrefresh_token値となります。アクセストークンの再発行を行うために、クライアントプログラムは”https://secure.mixi-platform.com/2/token”にPOSTにてアクセスします(先ほどのアクセストークン発行時と同じです)。その際、以下のパラメータをリクエストボディにapplication/x-www-form-urlencoded形式で指定します。全体のURLおよびリクエストボディは以下のようになるでしょう。https://secure.mixi-platform.com/2/tokengrant_type=refresh_token&client_id=908ed4da74f885a2ab&client_secret=9720b4826e90ad9f053a57500d3a8c697c01d1&refresh_token=39c5662a2e8b87d41c1eebe79f68af各パラメータの値が正しければ、以下のような結果を得るでしょう。{"refresh_token":"39c5662a2e8b87d41c1eebe79f68af","expires_in":900,"access_token":"b1bdf0cd88d4b400dfe785da132a9a"}access_token値として、新しく発行されたアクセストークンを得ることができます。この新しいアクセストークンを使用して、各種APIの利用を継続することが可能です。リフレッシュトークンの期限切れリフレッシュトークンは、ユーザの認可状況あるいはAPIの利用状況によって、有効期限が切れることがあります。リフレッシュトークンの有効期限が切れていた場合にアクセストークンの再発行を試みた場合は、以下のようなレスポンスが返却されます。Codeの入手」からやり直し、新しいトークンを取得するようにしてください。