#はじめに
Webサービスを使っているとよく「Googleアカウントでログイン」というものを見かけます。
何気なく使っていたものの、なぜGoogleアカウントで別のサービスに入れるのか、その仕組みが気になったので調べてみました。
#「Google アカウントでログインする」
「Google アカウントでログインする」という表現は、Googleではない第三者サービスに、Google アカウントを使ってログインができる場合に表示されます。
このログインの仕組みは「SSO」(シングルサインオン)と呼ばれ、ユーザーが使い慣れた既存のSNSなどのアカウントを利用してWebサイトやサービスにログインできる仕組みです。
SSOは、ユーザーのデータを外部から安全に利用するための仕組みである「OAuth」を利用し、各プラットフォーマー(各サービス)が提供するAPIを実行することによって利用できるようになります。
#OAuthとは
OAuthとは、権限の付与のためのオープンな標準規格です。
OAuth2.0とも言われますが、OAuthの最新バージョンのことを示しています。
ユーザー名とパスワードなどの実際のユーザー資格情報を共有することなく、あるサービスから別のサービスへ権限を与えるためのプロトコルです。
OAuth自体についてのより詳しい説明はこちらを参照下さい。
一番分かりやすい OAuth の説明
もう少し具体的なところを見ていきます。
#OAuthの登場人物
・クライアント(ユーザー)
・クライアントアプリ(Googleアカウントなどのログイン機能があるアプリ)
・認証プロバイダー
#「Google アカウントでログインする」の中身
ここでは「Google アカウントでログイン」機能があるチャットアプリが、
Google アカウントでログインをした時にどういう処理をしているのかをみていきます。
ユーザーの観点から見ると、OAuthでの処理の流れは次のようになります。
1. ユーザーはクライアントアプリケーション(ここではチャットアプリ)へのログインに利用する認証プロバイダー(ここではGoogle)を選びます。
2. ユーザーはその認証プロバイダーのWebサイトにリダイレクトされます。
リダイレクト先のURLには、クライアントアプリケーションのID値が含まれます。
ここで、ユーザーはクライアントアプリケーションによるアクセスを許可するかどうか尋ねられます。
3. ユーザーは認証プロバイダーに対してログインし、クライアントアプリケーションから求められているアクセスを許可します。
4. ユーザーはクライアントアプリケーションへと再びリダイレクトされます。ここには認可コードと呼ばれるデータが含まれています。
5. 内部で、クライアントアプリケーションは認証プロバイダーに認可コードを送信します。
認証プロバイダーはアクセストークンを返します。
6. クライアントアプリケーションはアクセストークンを含む認証済みのリクエストを行い、ログインを行います。
#認証プロバイダー
OAuthを利用するには、まずクライアントアプリ(チャットアプリ)を認証プロバイダーに登録する必要があります。
GoogleだとGoogle Developers Consoleにアプリを登録することでクライアントIDと秘密の値をもらうことができます。
これらがクライアントアプリを識別するために使われます。
#まとめ
「Googleアカウントでログイン」の処理の中身をみました。
認証プロバイダーとクライアントアプリのやりとりが複雑そうに感じたかもしれませんが、
OAuth利用するためのオープンソースのライブラリがいくつか開発されているので、
実装自体は割と簡単にできるようになっています。
よかったらログイン機能に取り入れてみてはいかがでしょうか?
#参考
[OAuthとは?| SAMLとOAuth]
(https://www.cloudflare.com/ja-jp/learning/access-management/what-is-oauth/)
[Google アカウントでログインするとは?仕組みからログイン方法]
(https://g-tips.jp/google-account/account-login-with/)
Go言語によるWebアプリケーション開発