InstagamのAPIを読むの続き。Authencationについてまとめ。
DO YOU NEED TO AUTHENTICATE?
- 「コメント」や「いいね!」やユーザのフィードをブラウズする場合は認証(access_token)が必要
- ポピュラーを表示するだけのアプリだったら認証不要
- client_idだけでOK
RECEIVING AN ACCESS_TOKEN
access_tokenを取得するために2つのことをする必要がある。
Server-side(Explicit) Flow
- Step1 : DIRECT YOUR USER TO OUR AUTHORIZATION URL
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code
-
- オプショナルなパラメータ
- scope
- basicスコープ以外を指定したい時(スコープについては一番下で)
- display
- モバイルに最適化された認証ページとサインインページをユーザに見せたい場合、"touch"を渡す
- scope
- オプショナルなパラメータ
- Step2 : RECEIVE THE REDIRECT FROM INSTAGRAM
- ユーザに正しく認証されたら、Step3で使用するcodeパラメータと一緒に、指定されたredirect_urlにユーザをリダイレクト
http://your-redirect-uri?code=CODE
-
- アプリ登録時のredirect URIにクエリパラメータを入力した場合、redirect URIの最初にそれを含んでいなければならない
- http://yourcallback.com/で登録、http://yourcallback.com/を送信→OK
- http://yourcallback.com/?this=thatで登録、http://yourcallback.com/を送信→NG
- (その他の例はInstagram APIのページにある)
- ユーザに拒否されたら、エラーのパラメータと一緒にredirect_uriにリダイレクト
- その場合は、エラーメッセージをユーザに提示するなど対処する
- アプリ登録時のredirect URIにクエリパラメータを入力した場合、redirect URIの最初にそれを含んでいなければならない
http://your-redirect-uri?error=access_denied&error_reason=user_denied&error_description=The+user+denied+your+request
- Step3 : REQUEST THE ACCESS_TOKEN
- アプリの識別パラメータとともに、前ステップで取得したcodeをaccess_tokenのエンドポイントにPOST
- 必須のパラメータ
- client_id
- client_secret
- grant_type
- 現在はauthorization_codeのみサポート
- redirect_uri
- 認証時に使用したredirect_uri
- 認証時と同じでなければならない
- code
- 取得したCODE
- リクエスト例
curl \ -F 'client_id=CLIENT-ID' \ -F 'client_secret=CLIENT-SECRET' \ -F 'grant_type=authorization_code' \ -F 'redirect_uri=YOUR-REDIRECT-URI' \ -F 'code=CODE' \ https://api.instagram.com/oauth/access_token
-
- レスポンス例
{ "access_token": "fb2e77d.47a0479900504cb3ab4a1f626d174d2d", "user": { "id": "1574083", "username": "snoopdogg", "full_name": "Snoop Dogg", "profile_picture": "http://distillery.s3.amazonaws.com/profiles/profile_1574083_75sq_1295469061.jpg" } }
-
- expiry timeは含んでいないことに注意
- access_tokenは明示的なexpiryはないが、ユーザがアクセスを無効にした場合、もしくはtokenがexpireされた場合を適切に取扱う必要がある
- この場合、レスポンスのmeta情報に"error_type=OAuthAccessTokenError"が含まれる
Client-Side(Implicit) Authentication
例えばjavascript appなどの場合の認証。
- Step1 : DIRECT YOUR USER TO OUR AUTHORIZATION URL
https://instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token
-
- ログイン画面とデータへのアクセス承認画面を表示
- Explicit Flowと違い、response_typeに"token"を指定
- Step2 : RECEIVE THE ACCESS_TOKEN VIA THE URL FRAGMENT
- URL fragmentにaccess_tokenを含むredirect_uriにリダイレクト
http://your-redirect-uri#access_token=ACCESS-TOKEN
-
- URL fragmentからaccess_tokenを取得すればよい
- ユーザがアプリのアクセスを拒否したら、Explicit flowと同じエラーレスポンスが返る
Scope(Premissions)
- OAuth 2.0の仕様ではアクセスのスコープを明示できる
- 現在は、すべてのアプリはデフォルトでbasic read accessが可能
- いいね!やコメントや友達を管理する場合には、認証のリクエストにおいてスコープを明示しなければならない
- サポートしているスコープ
- basic
- ユーザの全データを読み込み可能
- comments
- コメントを作成または削除可能
- relationships
- ユーザをフォローまたはアンフォロー可能
- likes
- いいね!またはいいね!の取り消しが可能
- basic
- 認証されていないスコープに対するリクエストをした場合には、OAuthPermissionsExceptionが返る
- 複数のスコープを一度にリクエストするときは、単にスコープをスペースで区切る
- URLの中では"+"にエスケープすることと同じ
- likesとcommentsを明示する場合の例
scope=likes+comments