🆘

どうしてもOAuthとは何かよく分からない人への新入門

2023/07/21に公開

はじめに

  • OAuth2.0の同意画面をポチポチしたことは、ある
  • OAuth2.0を使ったことはある
  • OAuth2.0のフローはなんとなく知っている
  • 『一番わかりやすいOAuthの説明』も読んだ

https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be

けど 「OAuth2.0とは何かがやっぱり良くわからない」 という方へ向けた記事です。
OAuth2.0を「成り代わり」という概念を軸に説明していきます。

OAuthとは?

自分がこの記事で伝えたいのはこれしか無いです。

OAuth2.0を 「成り代わり」 という概念を元に考えてみると、理解しやすく忘れにくい、かもです。
言い換えると、「アプリAがユーザに成り代わってアプリBを操作する仕組みを実現している」 ということです。

図示します。

ユーザが(最近何かと物騒な)Twitterを利用しています。
通常であれば、ユーザはTwitterにログインし、ツイートすることでしょう。

そこで、ユーザが「アプリA」というWebアプリを使い始めました。アプリAは自動でTwitterにツイートしてくれる機能を持っています。ユーザはその機能を使いたいので、「アプリAにツイートを許可しますか?」のような画面をまぁよく確認せずに許可しました。おかげで、アプリAはTwitter(アプリB)をユーザに成り代わって操作することが可能になりました。

もう一度言います。 アプリAはユーザのかわりにアプリBを操作しているように見えます。
まるで成り代わっているようです。

OAuth2.0のフローを再確認する

OAuth2.0を理解するポイントは 成り代わりの発生だということを強調しました。
では、アプリAがユーザに成り代わるにはどうすればいいでしょうか?

簡単なのは、アプリAがユーザのTwitterのユーザIDとパスワードでログインすること ですね。
ただそれだとツイート以外のフル権限を持ってしまったり、Twitter(アプリB)にパスワードがアプリAに保管されてしまったりと、気になる点がいくつか出てきます。

そのあたりの問題を解決しながら、成り代わりを実現したのがOAuth2.0です。
というわけでよく見かけるフローを再確認していきます。

アプリAがユーザが行う操作の権限を持つようになってる〜(ユーザに成り代わってる〜)と思いながら眺めてほしいです。

この辺で、 OAuth2.0は認可のフレームワークだ という説明にも納得いき始めると思います。

ずっと成り代わりだ成り代わりだと表現してきましたが、「アプリAにユーザに代わってアプリBを操作させる(成り変わらせる)ためにどうやって権限を委譲するか、というフロー(フレームワーク)」がOAuth2.0です。

※この記事では、なぜこのフローが安全で嬉しい仕組みなのかは見ていきません。

待て。OAuthってログインの手段では?つまり認証では?

「待ってくれ。自分がOAuthを使用する場面はログイン、つまり認可ではなく認証だぞ。」
と感じた方も多いと思います。

Sign in with XXXXXというボタンをよく見かけますよね。

自分が出会った例だと、GrafanaダッシュボードにGoogleアカウントでログインする、というものがありました。

なにか違うフローのように見えますが、実はこれもさっきの認可フローと同じです。
Googleのユーザ情報を取得するAPIの操作を認可し、その情報を使って・認証ログインをしていたという仕組みです。

まとめ・おわりに

「成り代わり」というキーワードが、OAuth2.0がどうしても理解できない人の助けになればと思っています。

この記事はとにかく理解を主軸においているので、この後はより専門的な記事や本・ドキュメントを読んだり、実際にOAuthの設定を行ったりするのが良いと思います。私もOAuth2.0への理解を深めていこうと思います。

ありがとうございました。

RFC:
https://datatracker.ietf.org/doc/html/rfc6749

Discussion