LinuCレベル3 セキュリティスペシャリスト 認証・認可 問7
認証・認可/Keycloak による認証認可Keycloakに、ブラウザ上で動作するSPA(シングルページアプリケーション)をOpenID Connectのクライアントとして登録する。構成として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「認証・認可」に対応。実際の試験問題ではありません)
- AClient authentication をオフにした公開クライアントとして登録し、認可コードフローにPKCEを組み合わせて使う
- BClient authentication をオンにして発行されたクライアントシークレットを、SPAのJavaScriptに埋め込んで配布する
- CDirect access grants を有効にし、SPAの画面で受け取ったユーザー名とパスワードをトークンエンドポイントへ送る
- D管理者だけが操作できる master レルムにクライアントを登録し、アプリの利用者もすべて master レルムに作成する
正解:A
解説
ブラウザで動作するSPAは、ソースコードが利用者の手元に配布されるため、クライアントシークレットを秘密として保持できません。そのためKeycloakでは Client authentication をオフにした公開クライアント(public client)として登録し、認可コードフローにPKCE(Proof Key for Code Exchange)を組み合わせて、認可コードの横取りを防ぎます。Client authentication をオンにした機密クライアント(confidential client)は、シークレットを安全に保管できるサーバーサイドのアプリケーション向けです。また master レルムはKeycloak自体の管理用で、アプリケーションと利用者は用途ごとに別のレルムを作成して管理するのが推奨されています。
選択肢ごとの解説
- A正しい。シークレットを保持できないSPAは公開クライアントとして登録し、認可コードフローとPKCEを組み合わせるのが適切です。
- B誤り。JavaScriptに埋め込んだシークレットは誰でも読み取れるため秘密になりません。機密クライアントはサーバーサイドのアプリケーション向けです。
- C誤り。Direct access grants はアプリがパスワードを直接扱う方式で、SSOやMFAの利点を損なうため、SPAの認証に使うべきではありません。
- D誤り。master レルムはKeycloak自体の管理用です。アプリケーションと利用者は、用途ごとに作成した別のレルムで管理します。