はじめに
過去三年間、技術者ではない方々に OAuth(オーオース)の説明を繰り返してきました※1,※2。その結果、OAuth をかなり分かりやすく説明することができるようになりました。この記事では、その説明手順をご紹介します。
※1:Authlete 社の創業者として資金調達のため投資家巡りをしていました(TechCrunch Japan:『APIエコノミー立ち上がりのカギ、OAuth技術のAUTHLETEが500 Startups Japanらから1.4億円を調達』)。Authlete アカウント登録はこちら!
※2:そして2回目の資金調達!→『AUTHLETE 凸版・NTTドコモベンチャーズ・MTIからプレシリーズA資金調達』(2018 年 2 月 15 日発表)
説明手順
(2)ユーザーのデータを管理するサーバーがあります。これを『リソースサーバー』と呼びます。
(3)ユーザーのデータを利用したい『クライアントアプリケーション』があります。
(4)ユーザーのデータをやりとりする口を用意します。これを『API(エーピーアイ)』と呼びます。
(5)クライアントアプリケーションがユーザーのデータをリソースサーバーに要求します。
(6)リソースサーバーはクライアントアプリケーションにユーザーのデータを渡します。
(8)ユーザーのデータを要求しているのが悪意のあるアプリだとしても、
(9)リソースサーバーはユーザーのデータを渡してしまいます。
(10)このままでは、悪意のあるアプリにもユーザーのデータが渡ってしまいます。
(12)API を守る仕組みのベストプラクティスでは、あらかじめクライアントアプリケーションに『アクセストークン』というものを持たせておきます。アクセストークンは、当該クライアントアプリケーションがユーザーのデータを利用することを許可されていることを示すものです。
(13)クライアントアプリケーションは、ユーザーのデータを要求する際、アクセストークンを提示します。
(14)リソースサーバーは、リクエストに含まれているアクセストークンを取り出し、
(15)ユーザーのデータを利用する権限があるかどうかを調べます。
(16)必要な権限があることを確認したあとに、ユーザーのデータをクライアントアプリケーションに渡します。
(17)この仕組みを機能させるためには、あらかじめクライアントアプリケーションにアクセストークンを渡しておく必要があります。
(18)必然の帰結として、アクセストークンを発行する係が必要となります。
(21)認可サーバーとクライアントアプリケーションの関係を簡単に説明します。
(23)クライアントアプリケーションに対してアクセストークンを発行します。
(24)ここまでの内容を復習します。登場人物は、認可サーバー、クライアントアプリケーション、リソースサーバーです。
注:認可サーバーの役割とリソースサーバーの役割を一つのサーバーが兼ねることもよくあります。
(27)クライアントアプリケーションは、アクセストークンを添えて、リソースサーバーにユーザーのデータを要求します。
(28)リソースサーバーはリクエストからアクセストークンを取り出し、
(29)アクセストークンがユーザーのデータを利用する権限を持っていることを確認し、
(30)ユーザーのデータをクライアントアプリケーションに渡します。
(31)ここまでは、認可サーバーがいきなりアクセストークンを生成してクライアントアプリケーションに発行するという流れでしたが、実際は、アクセストークンを発行する前にユーザーに確認を取ります。
(32)まず、クライアントアプリケーションが認可サーバーに対してアクセストークンを要求します。
(33)すると、認可サーバーは、クライアントアプリケーションが要求している権限を与えるかどうかをユーザーに確認します。
(34)ユーザーがクライアントアプリケーションに権限を与えることを了承すれば、
(36)クライアントアプリケーションにアクセストークンを発行します。
(38)これは、アクセストークンの要求とその応答を表しています。
(39)そして、この部分を標準化したものが『OAuth 2.0』です。OAuth 2.0 の詳細は、技術文書 RFC 6749 で定義されています。
説明は以上です。
このあとの説明手順
「アクセストークンの要求方法とそれに対する応答方法を標準化したものが OAuth 2.0 である」との説明が終わったあとは、クライアントアプリケーションが要求している権限を与えるかどうかをユーザーに確認する画面(認可画面)の説明(参考:『認証と認可』)、RFC 6749 で定義されている 4 つの認可フローの説明(参考:『OAuth 2.0 全フローの図解と動画』)をしていくことになります。
あと、『一番分かりやすい OpenID Connect の説明』という記事も公開したので、是非ご覧ください。
おわりに
API エコノミーの発展に伴い、API を守る技術である『OAuth 2.0』の概念を理解することは、技術者のみならず、ビジネスパーソンにとっても重要になってきました。本記事が、新たに OAuth 2.0 の概念を学ぶ必要のある方々の一助になれば幸いです。
追記(2020-03-20)
この記事の内容を含む、筆者本人による『OAuth & OIDC 入門編』解説動画を公開しました!
追記(2021-11-24)
『Software Design 2021 年 10 月号』(2021 年 9 月 18 日発売)の第 2 特集『挫折しない OAuth/OpenID Connect 入門』を執筆させていただきました。