医療業界向けに複数のSaaSプロダクトを提供するコンパウンドスタートアップ「カケハシ」では、OIDC (OpenID Connect) 対応の共通認証基盤を開発・運用中です。OIDC対応の認証基盤の開発では、画面をまたぎながら多様なパラメータを取り扱うため、不正な状態遷移やバリデーション漏れが大きなセキュリティリスクとなります。本セッションでは、TypeScriptで代数的データ型 (Algebraic Data Types; ADT) を活用し、以下のような特徴的なポイントを押さえて実装した事例を紹介します。
OIDCを利用した認証フローでは、多数のパラメータを扱う複雑なバリデーションが要求されるうえ、アカウント選択→認証→同意といったステップを画面遷移を伴いながら進める必要があるため、状態管理も非常に煩雑になります。
そこで、 「アカウント選択済み」「認証中」「同意完了」など、認証フローの状態と振る舞いを代数的データ型で表現します。これにより、型システムを活用して不正な状態遷移(例: 同意せずに認証を終了、画面Aをスキップして画面Bに直行してしまう)を排除できます。
代数的データ型は、バリデーション漏れの防止にも有効です。様々なユースケースで利用できるように設計されたOIDCでは、数多くのパラメータをバリデーションする必要があります。
そこで、バリデーションの状態を代数的データ型で表現することで、不正なパラメータが渡されることを防止します。