サーバーだけでOAuth2.0認証してgoogleのapiを使う | iwaのブログ

iwaのブログ

フリーでweb系のエンジニアやってます
備忘録的に書いていきます

ユーザー情報の入ったAPIをバッチで使ったり

自分のサービスから動画アップロードするときにいちいち認証画面を通したくない場合などに使えるかと思います

やってることは単純で、リフレッシュトークンをハードコーディングしておいて

API呼ぶときにリフレッシュトークンからアクセストークンを取得してそれを使うだけです

*リフレッシュトークンの取得方法
前準備としてAPI Consoleから
 ・クライアントID
 ・リダイレクトURL
 ・クライアントシークレット
 ・APIキー
を取得しておく

1.
 https://accounts.google.com/o/oauth2/auth?client_id=[クライアントID]&redirect_uri=[リダイレクトURL]&scope=https://www.googleapis.com/auth/youtube&response_type=code&approval_prompt=force&access_type=offline
 をブラウザでたたいて、OAuth認証したいアカウントでログイン、認証する
2.
 真っ白な画面になるが、そのときのURLのcodeをコピーしておく
3.
 ターミナルで
 curl -d "client_id=[クライアントID]&client_secret=[クライアントシークレット]&redirect_uri=[リダイレクトURL]&grant_type=authorization_code&code=[さっき取得したcode]" https://accounts.google.com/o/oauth2/token
 を実行
4.
 {
      "access_token" : "hogehogehogehogehoge",
      "token_type" : "Bearer",
      "expires_in" : 3600,
      "refresh_token" : "hogehogehogehogehoge"
 }
 と言った感じでrefresh_tokenが取得できるのでこれをハードコーディングする


こんな感じでcurlでも確認できます
1.
 ターミナルで
 curl -d "client_id=[クライアントID]&client_secret=[クライアントシークレット]&refresh_token=[さっき取得したrefresh_token]&grant_type=refresh_token" https://accounts.google.com/o/oauth2/token
 を実行
2.
 {
      "access_token" : "hogehogehogehogehoge",
      "token_type" : "Bearer",
      "expires_in" : 3600
 }
 このaccess_tokenを使用して
 curl -i https://www.googleapis.com/youtube/v3/channels?part=snippet\&mine=true\&key=[APIキー] -H "Authorization: Bearer [取得したaccess_token]"
 これでユーザー情報を含むデータも取得できます


ライブラリを使う場合は
$client = new Google_Client();

$client->setClientId(クライアントID);

$client->setClientSecret(クライアントシークレット);

$client->refreshToken(リフレッシュトークン);

$client->setDeveloperKey(APIキー);

これでライブラリが勝手にアクセストークンを取得してくれます