1️⃣

ID周りをやりたいエンジニアにすすめたい学習ステップ(1) : 単一アプリケーションとID管理

2024/04/03に公開

ritou です。

これについての話です。

https://twitter.com/ritou/status/1775294772523171997

この辺りずっとやってると「認証認可について詳しくなりたいです!」「OIDCに興味があります!」みたいなところから「何をやればいいですか!?」みたいなことを聞かれたりします。(やりたいことやればいいじゃんと思いつつ)

昔は 年に一回ぐらいIdPを作りましょう なんて言っていた時期がありますが、まぁそう簡単にできるものでもありません。ふじえさんの記事をdisっているわけではないですが、OIDCのところから始めても他にやることが多すぎて結構つらいのです。

何から始めたら良いか

現状のおすすめとしては、 Webアプリケーションフレームワークを使って単一アプリケーションを動かして、既存コードを追ったり拡張できるならやってみて色々細かい部分を理解するところから始めましょうというところです。 なんと、ひと昔前にQiitaに溢れたようなやり方ですが どのフレームワークを使うかみたいなこまけぇことは置いておいて、自分が理解しやすい言語のフレームワークを使って

  • 新規登録
  • ログイン/ログアウト
  • 設定変更
  • 退会

まで備わったアプリケーションを動かしてみましょう。

1.1 Identityライフサイクルの理解

まずは単一アプリケーションにおけるアカウントのライフサイクルを意識しましょう。

https://ritou.hatenablog.com/entry/2020/12/07/060000

新規登録、設定変更、退会みたいなところがどこに当たるのかはイメージしやすいでしょう。
良い機会なので、それぞれの機能で何が行われているかをコードベースで調べられるとより理解度が上がるかもしれません。

1.2 身元確認、当人認証を理解する

また、この段階でID管理における重要な概念である

  • 身元確認(Identity Proofing)/本人確認(Identity Verification)
  • 当人認証(Authentication)

あたりを意識できると良いでしょう。
例えば新規登録時のメールアドレス確認は身元確認、パスワード認証は当人認証にあたります。

ID連携のIdP機能のないWebアプリケーションフレームワークやプロダクトではIAL/AALみたいなものは意識されていないかもしれませんし、されているとしてもNISTの定義にうまく当てはめられないぐらいのものでしょうけれども、今後eKYCや他の認証方式をサポートする際にこれを意識できているかどうかが重要になってきます。

ここまできたら、よし、次はID連携だ! といきたいところですが、もう少し単一アプリケーションのID管理について解像度を上げていきたいです。

1.3 身元確認、当人認証機能の拡張

メールアドレスだけからSMSでも登録できるようにしたり、住所氏名生年月日の管理機能を追加することは実際のサービス開発においてもよくあるでしょう。最近はそれを本人確認書類で確認するeKYCを実装するところも多いです。ユーザーの属性情報を安全に管理するだけではなく、身元確認をどこまで実施したのかを管理してサービス内のIALを定義するところまでやってみましょう。

当人認証機能、つまりログイン方法の拡張も実際のサービス開発に近い体験ができそうです。パスワード認証からパスキーを導入してみたり、MFAを実装してみるというものですね。実装自体は認証周りのライブラリやモジュールを追加することで比較的簡単かもしれませんが、ここでもサービス内のAALを定義するところまでやってもらいたいところです。

1.4 セッション管理、セキュリティイベント履歴の実装

これはいつも言っているやつですね。

https://qiita.com/ritou/items/dad693070b109acbe1f7

もう認証基盤どころか単一のアプリケーションにおいてもこれぐらいは実装必須な機能だと考えています。

1.5 不正ログインなどの脅威と対策について理解する

一通りアプリケーションの挙動を理解し、機能の拡張などができるようになったら少し座学というか頭の体操はいかがでしょうか。単一アプリケーションに対する脅威と対策を考えてみましょう。徳丸さんの書籍が浮かびましたか?その通り、この辺りはセキュリティ屋さんの商売になるかもしれません。一緒にやればいいじゃない。個人的にはID連携の脅威と対策までも協力してカバーしていけたらお互いにとって良いことだと思っています。

次のステップ

単一アプリケーションとID管理というところではこんなところでしょうか。結構できることはありますし、これらを意識して取り組むことでID管理の解像度はそれなりに上がったり、今後出てくるID連携を考える知識のベースができるはずです。

次回は (2) 複数アプリケーションが絡むID管理 に入っていきましょう。今回一切話を出さなかったOなんとかの出番です。 ざっと想像するだけでやることがいっぱいあるのであんまり書く気が起きませんがやっていきましょう。

ではまた。

おまけ

3/18に会社のイベントで認証基盤についてお話ししましたが、この投稿で書いた内容で得られる知見は全てつっこんであります。

https://speakerdeck.com/ritou/mixi-mtoshe-nei-wai-nosabisuwozhi-eruren-zheng-ji-pan-wozuo-rutameniyatutekitakoto-number-mtdc2024

この辺りは別途記事を書く予定です。

Discussion