【2018年最新版】GoogleのAuthTokenとRefreshTokenまで取得する方法
かなりハマってしまったので、備忘録も兼ねています。
GoogleCloudPlatformでAPIを設定するまで(前提)
まずGoogleCloudPlatformにログインします。 cloud.google.com
ログインしている場合、右上のコンソールからダッシュボードにいけます。
サイドバーの「APIとサービス」の「ダッシュボード」に入ります。入ると「APIとサービス」のダッシュボードの中までいけます。
必要なAPIを有効にします。 今回は、AnalyticsReportingAPIを有効にしてみます。ヘッダーの検索ボックスから必要なAPIを検索しましょう。
再び、「APIとサービス」に戻り、「認証情報」でTokenを作成していきます。
認証情報を設定する
今回はOauth2クライアントIDを使用して、APIを叩くこととします(基本的なことはOauth2クライアントで出来ます) 認証情報 > 認証情報を作成 > OauthクライアントID に進みます
アプリケーションの種類は「ウェブアプリケーション」を選択します。
承認済みのリダイレクト URI
には本来ならばOauth2ログイン後のリダイレクト先を入れるのですが、今回はバッチサーバーやローカルからAPIをアクセスすることを前提としているので、適当に入れます。
僕はいつもGoogleのトップページ(つまり、 https://www.google.co.jp/ )を入れています。こちらのリダイレクトURLも保存しておきます。
作成するとクライアント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
↓
生成したURLをブラウザに貼り付けて、アクセスすると、Googleの認証画面が出てきますので、APIをアクティベートしたメールアドレスで許可してあげましょう。
許可すると以下のようなURLでリダイレクトURLを設定したページにアクセスされているはずです。
[リダイレクトURL]?code=xxxxxxxxxxxxxx
この 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に設定するのがポイントですね。
叩くとjsonが返ってきて、
{ "access_token" : "xxxxxxx", "token_type" : "Bearer", "expires_in" : 3600, "refresh_token" : "xxxxxxxxxxxxxx" }
こちらで取得できたリフレッシュトークンと、前に取得したクライアントIDとクライアントシークレットを使用すると、OAuth2.0でログインする処理を実装することができます。
まとめ
いかがだったでしょうか。結構Googleのauth認証って面倒くさいですよね。 このブログは備忘録のためにまとめておいたものですが、お役に立てれば幸いです!