スタッフブログ

OAUTH2.0を使ったGmailでのメール送信

2021年09月29日  担当:関戸

昨今メール送受信のセキュリティが高くなってきているようで、特にGmailやGsuiteの場合、設定を変更しない限りOAUTH2.0認証以外でのメール送受信ができなくなっているようです。

そこで現在、このOAUTH2.0認証に対応し、Gmailアカウントを送信元としてPCできる蔵からメール送信する機能を開発しています。

なかなか情報が少なく、手探りで開発している状態ですが、ここまで整理できた内容をまとめてみました。

 

OAUTH2.0認証の仕組み

OAUTH2.0認証を用いてデータを取得したり操作したりする場合、事前にユーザーが同意する必要があります。

スマホにアプリをインストールすると、初回起動時に許可を求められる場合がありますが、ちょうどそのイメージです。

この許可や実際の操作などだれが何をしているのかを図にまとめるとこちらのようになります。

OAUTH2.0認証の仕組み

 

OAUTH2.0認証の場合、「許可サーバー」というものがあり、こちらが認可・認証・権限等のコントロールを行っているのがポイントのようです。

 

PCできる蔵でGmailでメール送信する場合

上記の図をPCできる蔵を使ってGmailアカウントを送信元としてメール送信するというケースに当てはめてみました。

 

API作成・公開から認証まで

まず、APIを作成・公開し、許可サーバーに認証されてメール送信できるようにするまでの設定の流れは下記となります。

OAUTH2.0Gmail送信-認証(許可)までの流れ

 

各矢印で何が作成されたり、何が送信されるのかは、具体的にはこちらになります。

①API公開

(Google Cloud Platform管理画面)

  • クライアントID発行
  • クライアントシークレット発行

②API登録

(PCできる蔵設定画面)

  • 送信元Gmailアドレス登録
  • クライアントID登録
  • クライアントシークレット登録

③同意画面表示

(ブラウザ表示)

  • クライアントID
  • クライアントシークレット

④同意

(ブラウザ)

  • 送信元Gmailアドレスでログイン
  • 同意ボタンクリック

⑤許可

(Http通信)

  • 許可コード(AUTHコード)
  • リフレッシュトークン

メール送信時

設定が完了し、実際にメール送信する際の流れは下記となります。

OAUTH2.0Gmail送信-メール送信の流れ

 

各矢印で何が作成されたり、何が送信されるのかは、具体的にはこちらになります。

⑥アクセストークン要求

(Http通信)

  • クライアントID
  • クライアントシークレット
  • リフレッシュトークン

⑦アクセストークン発行

(Http通信)

  • アクセストークン

⑧メール送信

(Http通信)

  • アクセストークン
  • 送信元・宛先・件名・本文・添付ファイル

 

 

開発しながら気が付いたのですが、このOAUTH2.0認証を使った場合、メールアカウントのパスワードを登録する必要がありません。

今回のケースの場合、PCできる蔵内のプログラムやデータベースにこのGmailアカウントのパスワードを保存する必要がありません。ですので、仮にもしデータが流出しても、このGmailアカウントが乗っ取られる心配がありません。

また、APIを作成する際、どの範囲の操作を許可するか(スコープと言うそうです)を正しく設定しておけば、それ以外の操作ができなくなります。例えば、今回の場合はメール送信のみを許可する設定にしておけば、過去のメールを閲覧することなどもできません。

この辺りの点がOAUTH2.0認証のポイントと言えそうです。

 

今後、メールアカウントの認証はOAUTH2.0認証が必須となりつつなるようなので、他のメールアカウントでも対応できるよう開発を進めているところです。

また、クラウドサービスのデータをAPIを用いて利用するケースなどもOAUTH2.0認証が必要なケースも増えているようなので、このような場合にも応用できると思います。