✍️

OAuth2.0をめちゃくちゃ噛み砕いてみた

2022/11/19に公開

※この記事は、connpass経由でStudyCoさんの勉強会『やさしく入門するOAuth2.0』に参加した際の個人的な備忘録になります🙇

OAuth2.0とは??

  • OAuth2.0は、「認可」の仕組みの一つだよ

Google垢やTwitter垢を使ってアプリにサインインした時とかに
「このアプリでは、google(twitter)のこの機能とこの機能について、使うぜ??」
的な表示が出るアレのことです(と、解釈している)

OAuth2.0の認可の仕方をざっくり解説

OAuth2.0での認証の仕方は主に4種類あるが、今回は主に利用される「認可コードグラント」について解説

以下では、最近何かと話題なTwitterを例に説明していく
例えば、TwitterのAPIを利用して、フォロバしてないユーザーの一覧を表示して、1週間フォロバしてない時は「早くフォロバしろ」と通知し、フォロバを急かす謎アプリがあったとする
仮にそのアプリの名前を フォロバアプリ とする(ダサい)

登場人物

  1. 👦リソースオーナー (resource owner)
    フォロバアプリを使う人(リソースサーバーへTwitterの情報を渡すよ)
  2. 📱クライアント (client)
    フォロバアプリのこと(認可サーバーにリソースオーナーからの情報を渡すよ)
  3. 🐦認可サーバー (authorization server)
    Twitter developers(アプリを作るときとかにそちらのAPI使いますねと登録するアレ(と解釈) )
  4. 🐥リソースサーバー (resource server)
    Twitterのサーバ(実際に処理を行うやつ(フォロバアプリでいうフォローしてないを検知する処理))

認可コードグラント

シーケンス図的には、以下になります。

はい。ちょ〜〜っと図だけでは難しいですね。分かります。私もです。
勉強会ではしっかりと解説してくださって、めちゃくちゃわかりやすかったのですが、説明なしの図だけになると、難しいですよね。

そこで、それを自分なりに会話調にしてみました。
ドン。

文字が小さくて読めないという声が聞こえてきそうですが、そこは頑張って呼んでくださいmm
(シーケンス図まで作って、いざ貼り付けると思いの外、小さかったので私のやる気が0になってしまいました)

めちゃくちゃ手間がかかっていますが、このめんどくささのおかげで安全性が担保できています。

いきなり、アプリに 「ほい!! TwitterからAPIキーとか全部もらってきたから、アプリさん、あとはよしなに〜!!🙏」みたいなテンションで行くと、通信の段階でAPIキーが漏れて、悪意のある攻撃者がAPIキーでやりたい放題できてしまいます。

また、権限の範囲をできるだけ小さく貰うのも、漏洩した時の被害を最小限に抑えるためです。気持ち的にはATMで大金を下ろした時と一緒ですね、「こんなに持つのは怖すぎるって!!!」って感じです。

利用者的にも、無駄にフル権限のトークンをアプリに渡すと、「こいつ、裏でなんかやってないよな??」的なってなりかねません。友達に「家に財布忘れたけど、喉乾いたんだ、だから3万円貸してくれない??」って言われたら、友情にヒビが入りかねませんよね、それです。

おわりに

勉強会ではPKCEなど、もっと深く入り込んだものも学習しましたが、シーケンス図で体力が尽きたので、また今度、調べて記事にしたいと思います。OAuth2.0とOIDCの違いとかも調べたい。
だんだん、文章がテキトーになっていますが、ご了承を🙇

何か、間違っている点がありましたら、コメントでご指摘いただけますと幸いですmm

参考資料

やさしく入門するOAuth2.0
公式ドキュメント

Discussion