Web API も知らない外国人に英語で OAuth を説明してきた話

# API World ブース出展

2019 年 10 月 8 〜 10 日、米国カリフォルニア州のサンノゼで [API World](https://apiworld.co/) というイベントが開催されました。我が社 [Authlete, Inc.](https://www.authlete.com/ja/) は、当イベントにブースを出しました。

![Authlete_Booth_at_API_World_2019.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/87feced0-4faf-8440-4e49-1877fcbb1ed5.jpeg)


ブースを訪れる人達の知識レベルは様々です。相手に合わせて話す内容を調整する必要があります。私が応対する場合、説明は次のように切り出します。

_**"We provide an implementation of OAuth 2.0 and OpenID Connect in a unique way."** （私達は OAuth 2.0 と OpenID Connect の実装をユニークな方法で提供しています。）_

ここで、多くの人は

_**"How unique?"** （どんな風にユニークなの？）_

と食いついてきます。しかし、中には「？？？」という顔をしている人もいるので、そういうときは、

_**"Do you know OAuth?"** （OAuth はご存知ですか？）_

と尋ねます。ここで「聞いたことある」という返答だった場合、

_**"OAuth is a mechanism to protect Web APIs."** （OAuth は Web API を守るための仕組みです。）_

という感じで説明を続けます。


# OAuth なんて聞いたことない

OAuth という単語を聞いたこともない人も稀にいます。そういうときは、次の質問をします。

_**"Do you know Web API?"** （Web API は知ってます？）_

ここで「Web API は知ってるよ！」という反応であれば、「OAuth は Web API を守る仕組みです」という感じで話を繋げていきます。ですが、もしここで首を傾げていれば、

_**"For example, Facebook API, Google Maps API, Twitter API, ..."** （例えば Facebook API とか Google Maps API、Twitter API など）_

と補足します。すると、「あぁ、知ってるよ！」という反応になります。


# Web API も知らない

ここまできて、「知らないです...」という返答をする人達がいました。若い女子二人組です。思わず、

_**"Why did you come to this event, 'API' World?"** （なんでこの、**API** World というイベントに来たの？）_

と尋ねてしまいましたよ。（笑

話を聞いてみると、いろいろ勉強するためにイベントに来たとのことでした。

API World に来たのに API が何たるかも知らないのも可哀想だと思い、Authlete のビジネスには何の益も無いですが、丁寧に説明してあげることにしました。


# Web API から OAuth に至るまでの説明

私：_**"Do you know Facebook?"** （Facebook って知ってます？）_
彼女達：_**"Yes!"** （はい！）_ （以降、似たような反応が続くので省略）
<sup>内心：（良かった。Facebook は知ってた。）</sup>

_**"When a human uses Facebook, she logins Facebook and uses it interactively."** （人間が Facebook を使うときは、Facebook にログインしてインタラクティブに使います。）_

_**"When a computer program wants to use Facebook, however, it cannot login it and use it interactively."** （コンピュータープログラムが Facebook を使いたいときは、だけど、ログインしてインタラクティブに使うことはできないんです。）_
<sup>内心：（スクレイピングの場合はコンピュータープログラムがログインするんだけど、話がややこしくなるからスクレイピングについては一切触れないでおこう。あと、クライアントアプリケーションという用語は彼女達にとっては難しいだろうから、コンピュータープログラムという用語を使おう。）</sup>

_**"To enable computer programs to use Facebook, Facebook prepares 'Web APIs'. A 'Web API' is a kind of gate through which computer programs communicate with Facebook."** （コンピュータープログラムが Facebook を使えるようにするため、Facebook は Web API を用意します。Web API は、一種の門のようなもので、それを通じてコンピュータープログラムは Facebook とやりとりします。）_

_**"OAuth is a mechanism to protect Web APIs."** （OAuth は Web API を守るための仕組みなんです。）_

_**"In the best practice, when a computer program accesses a Web API, it brings a ticket, which represents permissions to use the Web API."** （ベストプラクティスでは、コンピュータープログラムは Web API にアクセスする際、チケットを持っていきます。そのチケットは Web API にアクセスするための許可を表すものです。）_
<sup>内心：（アクセストークンという用語を使わず、分かりやすくチケットと表現しておこう。）</sup>

_**"The Web API checks whether the ticket is valid. Only when the ticket is valid, the Web API responds with a valid response."** （Web API はチケットが有効かどうかをチェックします。有効な場合のみ、有効な応答をします。）_

_**"For this mechanism to work, there must exist a system that issues tickets."** （この仕組みが動くためには、チケットを発行するシステムが存在しないといけません。）_
<sup>内心：（サーバーという用語を避け、システムという用語を使おう。）</sup>

_**"And, the system is called 'Authorization Server'."** （そして、そのシステムは認可サーバーと呼ばれます。）_

_**"OAuth is a must keyword in API World. Google it for further details."** （OAuth は API World では必須のキーワードです。詳細は Google で調べてね。）_

彼女達は「すごく勉強になりました！ありがとうございました！」と喜んで、下の図が印刷されたクリアファイル（Authlete 社ブースの景品）を「教材として！」と言って持って行きました。

![OAuth-Flows+Authlete-in-English_2_Authorization-Code-Flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/2806135b-069d-fbe9-599d-2a000aad2599.png)

しかしながら、彼女達がこの図の全貌を理解するのはいつの日になるだろうか・・・


# さらなる英語での解説

イベント最終日は、弊社[工藤](https://twitter.com/tkudos)が『[Authorization Architecture Patterns: How to Avoid Pitfalls in OAuth/OIDC Deployment](https://www.slideshare.net/tkudo/authorization-architecture-patterns)』というタイトルで発表をおこないました。

|![Tatsuo_API_World_2019.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/39b04104-1a62-e4cc-e704-ea76cfa9b855.jpeg)|
|:-:|
|英語でマニアックな話をしている工藤さん|

|![Tatsuo_API_World_2019_Audience.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/79fed16c-9d30-4cda-04ff-89c12e634cdd.jpeg)|
|:-:|
|工藤さんのプレゼンを聴く皆様。写真を撮る人もちらほら|

発表資料は SlideShare で公開してありますので、是非ご参照ください！

[![thumbnail](https://image.slidesharecdn.com/authorization-architecture-patterns-191010165538/95/slide-1-1024.jpg)](https://www.slideshare.net/tkudo/authorization-architecture-patterns)


# IIW (Internet Identity Workshop)

そういえば、API World の一週間前、Mountain View で開催された IIW ([Internet Identity Workshop](https://internetidentityworkshop.com/)) で、勢い余って私も『[Financial-grade API and CIBA](https://speakerdeck.com/takahikokawasaki/financial-grade-api-fapi-and-ciba-iiw-fall-2019)』というタイトルでセッションを開いたのでした。公式の[議事録](https://iiw.idcommons.net/Financial-grade_API_%26_CIBA_(Client_Initiated_Backchannel_Authentication))は[崎村さん](https://twitter.com/_nat)にとっていただきました。セッションで用いた資料は SpeakerDeck で公開してあります。

イベントの様子は ken5scal さんのブログ記事をご参照ください！

* **[Internet Identity Workshop（Fall 2019）に初めて参加してきた話](https://ken5scal.hatenablog.com/entry/2019/10/04/Internet_Identity_Workshop%EF%BC%88Fall_2019%EF%BC%89%E3%81%AB%E5%88%9D%E3%82%81%E3%81%A6%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%A6%E3%81%8D%E3%81%9F%E8%A9%B1)** (by ken5scal)

|![Taka_and_Justin_IIW_Fall_2019.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/789f1233-e08d-0644-6131-a047581321aa.jpeg)|
|:-:|
|IIW 会場で Authlete パーカーを着て Justin と記念写真|


# おわりに

彼女達への説明の手順は、英語圏で人気のブログ記事 _**"[The Simplest Guide to OAuth 2.0](https://medium.com/@darutk/the-simplest-guide-to-oauth-2-0-8c71bd9a15bb)"**_（『[一番分かりやすい OAuth の説明](https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be)』の英訳版）とほぼ同じです。日本語よりも英語が得意なチームメンバーがいて、OAuth を知らない場合は、_**"[The Simplest Guide to OAuth 2.0](https://medium.com/@darutk/the-simplest-guide-to-oauth-2-0-8c71bd9a15bb)"**_ を紹介してあげてください！

<img width="693" alt="39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/20ea8e03-1420-2f5d-7124-817b8a87d470.png">