oinume journal

Scratchpad of what I learned

クライアントを作って理解するOAuth2(準備編)

はじめに

GoogleやFacebookなどの外部サービスのAPIを利用する上で欠かせないのがOAuth2という仕様なんだけど、この仕様だけ読んでいてもつまらないしよーわからんので、実際に手を動かしてみて理解を深めよう、というのがこの記事の趣旨です。実際にはOAuth2素人が少し仕事でかじった知識をアウトプットしたものです。

OAuthとは

エンドユーザーのデータを3rd party applicationに渡すための仕組み。日本語だとこのページの説明が一番わかりやすい。

qiita.com

OAuth 2.0自体のRFCの仕様は以下にある。

必要なもの

  • Googleアカウント。GCPプロジェクトを作成するために必要
  • Go runtime(optional)

準備

  • 今回はOAuth 2.0のAuthorization Code grantというGrant typeを使って認可を行う
  • この記事で作成するGmail Fetcherというものを3rd party applicationとしてGoogleに登録し、Access tokenを取得してGoogleのAPIを呼び出す

そのためには以下の手順でGoogleにアプリケーションを登録する必要がある。まずはGCPのConsoleからプロジェクトを作成する。詳細は以下の動画を見てほしい。

youtu.be

  1. プロジェクト名はoinume-gmail-fetcherにする。ただ、他の人がプロジェクトを作る場合、oinumeは自分のアカウント名とか適当な文字列にしておく。でないと重複して作れないので。
  2. 次に、左上のメニューからAPIs & Servicesを選んで、APIs & Servicesのページを開き、ENABLE APIS AND SERVICES のボタンをクリックする。
  3. そうするとAPIの一覧の画面に行くので、スクロールしてGmailのAPIを探してクリックする。
  4. そしてENABLEボタンをクリックしてGmailのAPIを有効にする。
  5. 次にCredentialsの画面を開き、CREATE CREDENTIALSのボタンをクリックする。
  6. フォームが出てくるので以下のように入力し、What credentials do I need?ボタンをクリックする。
    • Which API are you using?: Gmail API
    • Where will you be calling the API from: Web server
    • What data will you be accessing?: User data

上の手続きを行ってClient idの発行が終わったら準備は完了。長くなるので、実際にOAuth2のフローの説明については次の記事で説明する。

用語の説明

ClientというのはGoogleで登録するあなたの3rd party applicationのこと。今回はgoogle profile getterというアプリケーションを作ってみるとする。

Resource owner or End user

エンドユーザー。Resource serverにデータ(リソース)を預けている。

Client

3rd party applicationのこと。今回だとgmail-fetcherのことを指す。End userからの認可を得てResource serverのデータにアクセスするアプリケーションのこと。

Resource server

End userのリソースを保持するサーバー。今回だとGoogleがこれに該当する。

Authorization server

End userからの認可を得てAccess tokenを生成するもの。日本語では認可サーバーと呼ばれる。

Client id

ClientのID

Client secret

Clientごとに発行される秘密鍵のようなもの。access tokenを取得する際に使用する。これが漏洩すると自分のアプリケーションを詐称してEnd userのデータにアクセスできてしまうので、漏洩しないようにする。 参考 - https://ja.stackoverflow.com/questions/26469/ - https://oauth.jp/blog/2012/08/03/re-oauth-20clientsecret/

OAuth consent screen

End userに表示する認可画面のこと。

Authorized redirect URIs

End userが認可画面でClientに認可をしたあとにコールバックされるURI

Scopes for Google APIs

End userがClientに対して認可を求めるスコープ。権限ともいう。例えばGmailのAPIを使ってメール送信したい場合は、メール送信をするためのscopeを要求する必要がある。

Access token

ClientからResource server(今回だとGoogle)のAPIを呼び出すためのトークン文字列。

次回作

1月中にはアップすると思うので乞うご期待。

OAuth徹底入門 セキュアな認可システムを適用するための原則と実践

OAuth徹底入門 セキュアな認可システムを適用するための原則と実践

  • 作者: Justin Richer,Antonio Sanso,Inc. Authlete,須田智之
  • 出版社/メーカー: 翔泳社
  • 発売日: 2019/01/30
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る