· oauth

Google OAuth2

Google OAuth2のトークンを手動で取得メモ。通常はWebアプリはブラウザで取得してトークンとか保存すればいいのだが、 hubot scriptでcalendar情報とか取得したい場合は、そうはいかない。

クライアントID作成

予めGoogle Developer Console画面で、クライアントIDを作成 https://console.developers.google.com/project

code 取得

https://accounts.google.com/o/oauth2/auth
?client_id={client_id}
&redirect_uri={callback_url}
&scope={scope}
&response_type=code
&approval_prompt=force
&access_type=offline

scopeは https://www.googleapis.com/auth/calendar.readonly など

GETで上のURLを叩く。認証画面が開き、承認すると、指定したcallback_urlにcodeが返ってくる。

{callback_url}?code=4/W30HqfsDKmamqdW*****************

access_token, refresh_token 取得

$ curl
-d client_id={client_id}
-d client_secret={client_secret}
-d redirect_uri={callback_url}
-d grant_type=authorization_code
-d code={code} https://accounts.google.com/o/oauth2/token

以下のJSON結果が返ってくる

{
  "access_token" : "{access_token}",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "{refresh_token}"
}

access_tokenの情報を確認してみる。

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={access_token}

アクセスする度にexpires_inが減って行くのがわかる。0になると、access_tokenは失効されるので、使えない。

新しいaccess_tokenを取得

expires_inで有効期限切れるまえに以下のPOSTで新しいaccess_tokenを取得

$ curl
-d client_id={client_id}
-d client_secret={client_secret}
-d refresh_token={refresh_token}
-d grant_type=refresh_token https://accounts.google.com/o/oauth2/token

上の結果、新しいexpires_inが3600の新しいaccess_tokenが返ってくる。

3600秒以内にaccess_tokenを更新して使えばOK!