なりちゅうのエンジニアブログ

毎日学んだことをちょっとずつブログに書いていきます。

【2018年最新版】GoogleのAuthTokenとRefreshTokenまで取得する方法

かなりハマってしまったので、備忘録も兼ねています。

GoogleCloudPlatformでAPIを設定するまで(前提)

まずGoogleCloudPlatformにログインします。 cloud.google.com

ログインしている場合、右上のコンソールからダッシュボードにいけます。 f:id:asamiran:20171016153615p:plain

サイドバーの「APIとサービス」の「ダッシュボード」に入ります。入ると「APIとサービス」のダッシュボードの中までいけます。 f:id:asamiran:20171016153650p:plain

必要なAPIを有効にします。 今回は、AnalyticsReportingAPIを有効にしてみます。ヘッダーの検索ボックスから必要なAPIを検索しましょう。 f:id:asamiran:20171016154722p:plain

再び、「APIとサービス」に戻り、「認証情報」でTokenを作成していきます。

認証情報を設定する

今回はOauth2クライアントIDを使用して、APIを叩くこととします(基本的なことはOauth2クライアントで出来ます) 認証情報 > 認証情報を作成 > OauthクライアントID に進みます f:id:asamiran:20171016155659p:plain

アプリケーションの種類は「ウェブアプリケーション」を選択します。 承認済みのリダイレクト URI には本来ならばOauth2ログイン後のリダイレクト先を入れるのですが、今回はバッチサーバーやローカルからAPIをアクセスすることを前提としているので、適当に入れます。 僕はいつもGoogleのトップページ(つまり、 https://www.google.co.jp/ )を入れています。こちらのリダイレクトURLも保存しておきます。 f:id:asamiran:20171016161145p:plain

作成するとクライアントIDクライアントシークレットが表示されたモーダルが表示されていると思います。 その二つをコピーして控えておきます。

必要なAPIのScopeを調べる

次に必要なAPIのscopeを調べます。scopeとはそのAuthTokenがアクセスできる権限のことです。 scopeは以下のURL先で必要なモノを見つけましょう。

OAuth 2.0 Scopes for Google APIs  |  Google Identity Platform  |  Google Developers

URLをコピーしておきましょう。 今回の場合は、GoogleAnalyticsAPIを叩く想定なので、 https://www.googleapis.com/auth/analytics をコピーしておきます。

認証コードを作成する

さて、コピペしたものを一覧化すると、

  • リダイレクトURL
  • クライアントID
  • クライアントシークレット
  • scopeのURL

です。 上記の情報からURLを生成します。

https://accounts.google.com/o/oauth2/auth

?client_id=[クライアントID]

&redirect_uri=[リダイレクトURL]

&scope=https://www.googleapis.com/auth/analytics (使用するscopeのURL)

&response_type=code

&approval_prompt=force

&access_type=offline

https://accounts.google.com/o/oauth2/auth?client_id=クライアントID&redirect_uri=リダイレクトURL&scope=https://www.googleapis.com/auth/analytics(使用するscopeのURL)&response_type=code&approval_prompt=force&access_type=offline

生成したURLをブラウザに貼り付けて、アクセスすると、Googleの認証画面が出てきますので、APIをアクティベートしたメールアドレスで許可してあげましょう。

f:id:asamiran:20180515013911p:plain

許可すると以下のようなURLでリダイレクトURLを設定したページにアクセスされているはずです。

[リダイレクトURL]?code=xxxxxxxxxxxxxx

https://www.google.co.jp/?code=4/AABM2ixRiiSnSl_cimvAqy5GVo4hogeOid7_RSpdEBJCP4xaeRrIvyWvAY6cs6s6qpf6G5GJhp9mgFIYKXERLOQ4#

この code= 以下の文字列がリフレッシュトークンに必要な認証コードです。こちらを保存しておきます。

リフレッシュトークンを生成する

curlで取得する場合

これも、もう結構色々なブログで書かれていますが

curl -d client_id=[クライアントID] -d client_secret=[クライアントシークレット] -d redirect_uri=[リダイレクトURL] -d grant_type=authorization_code -d code=[認証コード] https://accounts.google.com/o/oauth2/token

を叩きます。

Postmanで取得する場合

Postmanとは

GUIのWeb API開発ツール。結構便利なのでおすすめ。特にPostmanはAPIを叩く設定を保存しておけるのでGoogleの認証周りを保存しておくと、使いまわせて便利です☆(ゝω・)vキャピ => Postmanをもっと詳しく知りたい方はこちら

Postmanを使用するときには以下のような設定でOK。 content-typeをx-www-form-urlencodedに設定するのがポイントですね。 f:id:asamiran:20180515013518p:plain

叩くとjsonが返ってきて、

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

こちらで取得できたリフレッシュトークンと、前に取得したクライアントIDとクライアントシークレットを使用すると、OAuth2.0でログインする処理を実装することができます。

まとめ

いかがだったでしょうか。結構Googleのauth認証って面倒くさいですよね。 このブログは備忘録のためにまとめておいたものですが、お役に立てれば幸いです!