APIアクセスに必要なのはアクセストークン
一つ一つのAPIアクセスにはアクセストークンというのが必要。トークンってのはブラウザアクセスでいうセッションIDみたいなもん。ブラウザからWebサービス使うときにも裏の通信ってID/PASSを毎回送るんじゃなくて、セッションIDだけを送ることで、「さっきログインした私」であることを伝えている。アクセストークンもそういうもん。
じゃぁアクセストークンってどうやったら取れるの?
Twitterとかの連携アプリで、Twitterのログイン画面に戻ってきて、アプリを承認しますかって感じでTwitter側でのログインをすることで、トークンをもらうってのはよくある。だけど、今回やりたいのはユーザに認証画面を見せたくないのだ。
リフレッシュトークンというものがある
アクセストークンには寿命があるんだけど(Googleの場合は3600秒)、アクセストークンを再度取得するためのトークンがある。それがリフレッシュトークン。リフレッシュトークンの寿命は長い(じゃぁ、アクセストークンの寿命が長くてもいいじゃないって気はするがそこは受け入れるしかない)。ひとまずリフレッシュトークンをサーバ側のプログラムに埋め込めばしばらくは安泰ということだ。
リフレッシュトークンはどうやってもらうの?
認証コードってものを使ってGoogleの認証サーバにリクエストを出すともらえる。これは一度やれば良い作業なので手作業でOK。認証サーバはREST APIで動いているんだけど、プログラムにする必要もなくて、ターミナルから、curlでリクエストを出せばいい。
認証コードはどうやってもらえるの?
これは、普通にGoogleのログイン画面からブラウザを通じて認証コードをもらう。
https://accounts.google.com/o/oauth2/auth
ってところに、以下の情報を渡す
- クライアントID
- クライアントシークレット
クライアントIDとクライアントシークレットはどこでもらえるの?
これはGoogleのデベロッパーコンソールの画面から発行してもらう。クライアントIDとクライアントシークレットは、APIにとってのID/PASSみたいなもん。API使っていて万が一これらの情報が漏れたとしても、クライアントIDの単位で削除もできる(Googleのアカウントは削除されない)。
ということで一杯あるけどまとめ。
- アクセストークン(Access Token)
- セッションみたいなもの
- APIアクセスの時には必ず必要
- リフレッシュトークン(Refresh Token)
- アクセストークンをプログラムから自動取得するためのトークン
- 認証コード(Authorization Code)
- Google側でログインするともらえるコード
- よくあるOAuthは認証コードがクエリストリングについて、自分サイトにリダイレクトするんだけど、サーバ側だけで完結させたいときには、認証コードを手でコピペして、リフレッシュトークンをもらう
- CODEって名前で出てくるから超ややこしい
- クライアントID/クライアントシークレット
- デベロッパーコンソールの画面上で取得する。APIのためのID/PASSみたいなもんだと思えばいい
- アクセストークンをもらうまでのAPIアクセスには、クライアントIDとクライアントシークレットが必要
以上の実際の作業は、こちら
に書かれているので、これをコピペすればOK。
あと、認証周りは、ライブラリもあるんだけど、一つ一つは単なるRESTのAPIなので、curlで手作業でひと通り触ってみると、すごく分かりやすいし、問題が起きた時のデバッグも楽。
0 件のコメント:
コメントを投稿