OAuth徹底入門を読んだ感想

junichi_y
·

ちょっと自信ないけど頑張って読んだので感想を書く。

スクラップはこちら

なぜ人々はOAuthを知ろうと思うのか

OAuthをちゃんと理解しているかどうかでエンジニアとしての力量を計られている気がするからじゃないだろうか、知らんけど

わたしはそんな感じに思ってる

マスタリングTCP/IPを読んでちゃんとネットワークのことを理解しているかどうか、DBにおいてクエリが書けるだけでなくスロークエリを解析してパフォーマンスチューニングができるかどうか、OSやメモリのような低レイヤーの知識があるかどうかなどなど

サーバーエンジニアはイケてるフレームワークが使えるかどうかではなくこういった基礎力のようなことを試されることが多いように感じる

もちろんフロントも同じだろうけど、最近のフロントエンドは変わりゆくトレンドをいかに触り、エコシステムやWebの標準を突き詰められるかの方が遥かに大変で重要でその人の戦闘力になる気がするからやっぱりサーバーと比べると話が変わってくる気がしなくもない

本題のOAuthのようなセキュリティ話は特に玄人と素人を見極めるにはもってこいの題材でXでもよく見かける話題な気がする

これを知らないやつエンジニア失格とか

プロとして知ってないといけないよねという主張はわかるけど知らない人を馬鹿にするような風潮は好きじゃない

エンジニアになって良かったと思ってるけど知らないことを馬鹿にするような風潮はほんと好きじゃない

そして、OAuthは難しい

OAuthというかセキュリティ全般そう思うけどOAuthは登場人物も多いし、フローが多いので簡単に理解できるものではないと思う

のわりには世界で1番簡単なOAuthのようなわかりやすさに特化したような記事が多く存在する、ような気がする

が、そういった記事を読んではわかった気になりまた調べてわかった気になるを繰り返すくらいならこのOAuth徹底入門を読んだ方がいいと思う

読みやすいかどうかは別として300ページ以上もOAuthについての解説が書かれているのにたかだか10分もあれば読めるような記事で完全に理解は無理だろう

OAuthとOIDC

多くのアプリケーションエンジニアがOAuthについて知りたいと思うのはおそらく認証についてちゃんと理解したいからであろう。

さすがに有名な話でOAuthは認証プロトコルとして使えないので代わりにOIDCを使うことになるが本書でOIDCの章は1章くらいであとはOAuthでリソースをどう安全に取り扱うのかの部分が大半

アプリケーションのユーザーの認証をどう行うかは主題ではない

それはOAuthプロトコルの話ではないから。繰り返すがOAuthは認可プロトコルで委譲のプロトコルだから

なので多くのアプリケーションエンジニアにとって1番知りたいであろう認証のところはそんなに多くは書かれていない

そして、認可サーバーを一から実装することになったエンジニアなんてそうはいないだろうからQiitaやZennのOAuthについての記事の方が有益かもしれない

それでもOAuthについての解像度は大事

だと思った。

そして、この本を読むことで解像度はかなり上がるだろう。

正直、退屈で同じようなフローを繰り返し見ていると眠気が限界で半分くらい流し読みしてしまったけども

それでも、解像度は上がったと思う

少なくとも、とても多くのステップを踏み、認可サーバーのような登場人物が多くの仕事をしているということは理解できた


ここでFirebase Authenticationの話をしたい

現在の開発現場ではフロントとバックエンドに分かれてAPIでやり取りすることが多いと思う

マイクロサービスで開発しているところも多いと思う

こういったAPI認証をサクッとやりたいときにFirebase Authenticationは非常に便利だ

なのでスタートアップや新規開発の現場、特にモバイルではよく使われている気がする

このFirebase Authenticationを使って例えばGoogle認証でログインするのは非常に簡単なのだけど、これは裏側でFirebase SDKがOAuthのフローやIDトークンの作成や検証など多くのことをやってくれているからだ、たぶん

OAuthについての理解が浅いときっとFirebase SDKがやってくれていることのありがたさに気づけない気がする

なんか昔使ったときはアクセストークンとかリフレッシュトークンを開発者で管理してた気がするのだけど、今はトークンすら直接いじる必要がない

トークンの更新も勝手にやってくれる

GoのSDKもなかった気がする、勘違いじゃなければ

今はほんと便利だ

おわりに

認証は難しい。しかしアプリケーションにはなくてはならない機能だ

なので新規でアプリケーションを作るときに必ず実装しなくてはならない。そして、セキュリティに関わるのでちゃんと理解したうえで実装をしなくてはならない。

そんな認証実装にジュニアがアサインされたらそれはもう地獄でしょう

わたしが昔書いたJavaのSpringというフレークワークのSpring Securityについての記事がある

そんなにいいねもついてないけど毎月の閲覧レポートを見ると毎月ほぼ1番見られている

Spring Securityに関してはセキュリティがというよりかはSpringが悪い気がしなくもないけど答えを求めてインターネットを彷徨っているジュニアエンジニアが数多くいることがわかる

OAuth含めセキュリティに関してはどのような危機があるか、どうすれば防げるのかをまずイメージできるくらいwebやインターネットについて理解してなきゃいけない

それができないで認証の実装のようにやたら手続きや記述だけが複雑で多いものを理解できるはずもない

何が言いたいかというと認証やセキュリティは難しいのでちゃんと理解しておくと幸せになれるよということ

偉そうに言っても、わたしも自信を持って理解してる!!とは言えない。でも、業務の認証まわりのことを考える時に自分の中で納得できる考え方や設計ができるようにはなったと思う

ということで何回もOAuthについて調べるくらいなら本書を買いましょう

@junichi_y
エンジニアしてます。