APIの開発でGoogleログインを実装する必要がありました。
無知な私は当初、「画面(フロントサイド)がないとすぐ確認できないんじゃん?」と尻込みしていたわけですが。
意外と簡単に機能を試すことができたので、その手順を残しておきます。
前提
- googleアカウント取得済み
- 開発段階でgoogleログインの動きを確認したいレベル
- googleアカウントからemail情報を取得するのを目標とする
Googleログインに必要な情報を設定する
- クライアントID
- クライアントシークレット
- リダイレクトURI
Googleログインの一連の流れを実現するために上記を設定・取得します。
私は個人のGoogleアカウントを使って試しましたが、組織のアカウントでも基本的に問題はないのではないかと思います。
今回の範囲では、特に課金の要求などはありませんでした。
1. プロジェクトの作成を行う
- 下記のURLの
プロジェクトを作成
ボタンから
2. 認証情報を設定する
- メニューの
APIとサービス > 認証情報
より認証情報設定ページへ -
認証情報を作成
ボタンからOAuth クライアントID
を選択 - アプリケーションの種類を選んだら下記のような画面になる
- 名前
- わかりやすいもの
- 承認済みのリダイレクトURI
- とりあえず試してみたい段階であれば、
- googleの
https://www.google.co.jp/
を使わせてもらう -
http://localhost/
(動いている場合)
- googleの
- 本番運用するならきちんとしたURIを設定してください
- とりあえず試してみたい段階であれば、
-
作成
ボタンを押すと、「クライアントID」「クライアントシークレット」が取得できる
3.OAuth同意画面を設定する
-
APIとサービス > OAuth同意画面
より設定ページへ- ここで設定する内容が、よくソーシャルログイン画面で見る「〇〇が次の許可をリクエストしています」の画面に反映される
- アクセスできるユーザーのデータは、デフォルトでは「email」「profile」「openid」のみの模様
-
保存
ボタンを押して設定完了
GoogleのAPIにアクセスする
設定が完了したので、実際に動きを確かめていきます。
1.codeの取得
-
以下のURLを組み立ててアクセスする
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=<クライアントID>&redirect_uri=<リダイレクトURI>&scope=<スコープ>&access_type=offline&approval_prompt=force
- スコープには
email
profile
などが入る(%20
で複数連結も可能)
2.トークンの取得
- 以下のURLにPOSTでアクセスする
https://www.googleapis.com/oauth2/v4/token
- Content-Type
- application/x-www-form-urlencoded
- Body
- code:<コード>
- client_id:<クライアントID>
- client_secret:<クライアントシークレット>
- redirect_uri:<リダイレクトURI>
- grant_type:authorization_code
- access_type:offline
- curlコマンド打つのは大変なので、
ARC
というchrome拡張機能を使うのがおすすめ - 成功したら、
access_token
が取得できる
3.アクセストークンを使ってgoogleのユーザー情報を取得する
- 以下のURLにGETでアクセスする
https://www.googleapis.com/oauth2/v1/userinfo?access_token=<アクセストークン>
- 後半の手順1.で設定したスコープの情報が取れれば成功!
最後に
以上、とりあえずGoogleログインの動きを確認したいよーという場合の実行手順でした。
開発の助けになれば幸いです。
参考
https://himakan.net/websites/how_to_google_oauth
https://qiita.com/kite_999/items/bddd62c395f260e745bc
https://developers.google.com/identity/protocols/OAuth2
https://developers.google.com/youtube/v3/guides/auth/server-side-web-apps?hl=ja