どうしてもOAuthとは何かよく分からない人への新入門
はじめに
- OAuth2.0の同意画面をポチポチしたことは、ある
- OAuth2.0を使ったことはある
- OAuth2.0のフローはなんとなく知っている
- 『一番わかりやすいOAuthの説明』も読んだ
けど 「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:
Discussion