OAuth2.0をめちゃくちゃ噛み砕いてみた
※この記事は、connpass経由でStudyCoさんの勉強会『やさしく入門するOAuth2.0』に参加した際の個人的な備忘録になります🙇
OAuth2.0とは??
- OAuth2.0は、「認可」の仕組みの一つだよ
Google垢やTwitter垢を使ってアプリにサインインした時とかに
「このアプリでは、google(twitter)のこの機能とこの機能について、使うぜ??」
的な表示が出るアレのことです(と、解釈している)
OAuth2.0の認可の仕方をざっくり解説
OAuth2.0での認証の仕方は主に4種類あるが、今回は主に利用される「認可コードグラント」について解説
以下では、最近何かと話題なTwitterを例に説明していく
例えば、TwitterのAPIを利用して、フォロバしてないユーザーの一覧を表示して、1週間フォロバしてない時は「早くフォロバしろ」と通知し、フォロバを急かす謎アプリがあったとする
仮にそのアプリの名前を フォロバアプリ
とする(ダサい)
登場人物
- 👦リソースオーナー (resource owner)
フォロバアプリを使う人(リソースサーバーへTwitterの情報を渡すよ) - 📱クライアント (client)
フォロバアプリのこと(認可サーバーにリソースオーナーからの情報を渡すよ) - 🐦認可サーバー (authorization server)
Twitter developers(アプリを作るときとかにそちらのAPI使いますねと登録するアレ(と解釈) ) - 🐥リソースサーバー (resource server)
Twitterのサーバ(実際に処理を行うやつ(フォロバアプリでいうフォローしてないを検知する処理))
認可コードグラント
シーケンス図的には、以下になります。
はい。ちょ〜〜っと図だけでは難しいですね。分かります。私もです。
勉強会ではしっかりと解説してくださって、めちゃくちゃわかりやすかったのですが、説明なしの図だけになると、難しいですよね。
そこで、それを自分なりに会話調にしてみました。
ドン。
文字が小さくて読めないという声が聞こえてきそうですが、そこは頑張って呼んでくださいmm
(シーケンス図まで作って、いざ貼り付けると思いの外、小さかったので私のやる気が0になってしまいました)
めちゃくちゃ手間がかかっていますが、このめんどくささのおかげで安全性が担保できています。
いきなり、アプリに 「ほい!! TwitterからAPIキーとか全部もらってきたから、アプリさん、あとはよしなに〜!!🙏」みたいなテンションで行くと、通信の段階でAPIキーが漏れて、悪意のある攻撃者がAPIキーでやりたい放題できてしまいます。
また、権限の範囲をできるだけ小さく貰うのも、漏洩した時の被害を最小限に抑えるためです。気持ち的にはATMで大金を下ろした時と一緒ですね、「こんなに持つのは怖すぎるって!!!」って感じです。
利用者的にも、無駄にフル権限のトークンをアプリに渡すと、「こいつ、裏でなんかやってないよな??」的なってなりかねません。友達に「家に財布忘れたけど、喉乾いたんだ、だから3万円貸してくれない??」って言われたら、友情にヒビが入りかねませんよね、それです。
おわりに
勉強会ではPKCEなど、もっと深く入り込んだものも学習しましたが、シーケンス図で体力が尽きたので、また今度、調べて記事にしたいと思います。OAuth2.0とOIDCの違いとかも調べたい。
だんだん、文章がテキトーになっていますが、ご了承を🙇
何か、間違っている点がありましたら、コメントでご指摘いただけますと幸いですmm
Discussion