実践 Keycloak

―OpenID Connect、OAuth 2.0を利用したモダンアプリケーションのセキュリティー保護

[cover photo]
TOPICS
Web , Security
発行年月日
PRINT LENGTH
352
ISBN
978-4-8144-0009-6
原書
Keycloak
FORMAT
Print PDF EPUB
Ebook
4,180円
Ebookを購入する
Print
4,180円

Keycloakは、シングルページアプリケーション(SPA)、モバイルアプリケーション、REST APIなどのモダンなアプリケーションに焦点を当てた、オープンソースのIdentity and Access Management(IAM)ツールです。
小規模なウェブサイトから、数百万人のユーザーを抱える大企業まで、さまざまなシナリオの本番環境で使用されています。
本書は、開発コミュニティーのプロジェクトリーダーとコアディベロッパーが著した、Keycloakの包括的な解説書です。インストール方法から、管理コンソールやアカウントコンソールの使い方、本番環境での使用に備えた設定方法、ユーザーの管理、トークンとセッションの管理、SPIによるカスタマイズまでを詳しく解説しています。さらに、アプリケーションのセキュリティーを保護する方法や、OAuth 2.0とOpenID Connect(OIDC)を理解するための基礎知識も紹介します。さらに日本語版では補章として「クライアントポリシーによるセキュリティー保護」も収録しています。

関連ファイル

目次

訳者まえがき
まえがき

第1部 Keycloakを始めよう

1章 Keycloakを始めよう
    1.1 技術要件
    1.2 Keycloakの概要
    1.3 Keycloakのインストールと実行
        1.3.1 KeycloakをDockerで動かす方法
        1.3.2 OpenJDKでのKeycloakのインストールと実行
    1.4 管理コンソールとアカウントコンソールの使用
        1.4.1 管理コンソールを使ってみよう
        1.4.2 アカウントコンソールを使ってみよう
    1.5 まとめ
    1.6 質問

2章 サンプルアプリケーションのセキュリティー保護
    2.1 技術要件
    2.2 サンプルアプリケーション
    2.3 サンプルアプリケーションの実行
    2.4 サンプルアプリケーションへのログイン方法
    2.5 バックエンドREST APIの安全な呼び出し
    2.6 まとめ
    2.7 質問

第2部 Keycloakによるアプリケーションのセキュリティー保護

3章 標準仕様の簡単な紹介
    3.1 OAuth 2.0によるアプリケーションのリソースアクセスの認可
    3.2 OIDCによるユーザーの認証
    3.3 アクセストークンへのJWTの活用
    3.4 SAML 2.0が今でも重要な理由
    3.5 まとめ
    3.6 質問

4章 OpenID Connectによるユーザーの認証
    4.1 技術要件
    4.2 OIDCプレイグラウンドアプリケーションの実行
    4.3 ディスカバリーエンドポイント
    4.4 ユーザーの認証
    4.5 IDトークン
        4.5.1 ユーザープロフィールの更新
        4.5.2 カスタム属性の追加
        4.5.3 IDトークンにロールを追加する
    4.6 UserInfoエンドポイントの呼び出し
    4.7 ユーザーのログアウト
        4.7.1 ログアウトの開始
        4.7.2 IDトークンとアクセストークンの有効期間の活用
        4.7.3 OIDC Session Managementの活用
        4.7.4 OIDC Back-Channel Logoutの活用
        4.7.5 OIDC Front-Channel Logoutに関する注意点
        4.7.6 ログアウトにはどのように対応すればよいか?
    4.8 まとめ
    4.9 質問
    4.10 参考資料

5章 OAuth 2.0によるアクセスの認可
    5.1 技術要件
    5.2 OAuth 2.0プレイグラウンドアプリケーションの実行
    5.3 アクセストークンの取得
    5.4 ユーザーの同意の要求
    5.5 アクセストークンに付与されるアクセス権限の制限
        5.5.1 Audienceを利用したアクセストークンのアクセス権限の制限
        5.5.2 ロールを使用したアクセストークンのアクセス権限の制限
        5.5.3 スコープを利用したアクセストークンのアクセス権限の制限
    5.6 アクセストークンの検証
    5.7 まとめ
    5.8 質問
    5.9 参考資料

6章 さまざまなタイプのアプリケーションのセキュリティー保護
    6.1 技術要件
    6.2 内部アプリケーションと外部アプリケーション
    6.3 Webアプリケーションのセキュリティー保護
        6.3.1 サーバーサイドWebアプリケーションのセキュリティー保護
        6.3.2 専用REST APIを使用するSPAのセキュリティー保護
        6.3.3 仲介REST APIを使用するSPAのセキュリティー保護
        6.3.4 外部REST APIを使用するSPAのセキュリティー保護
    6.4 ネイティブアプリケーションとモバイルアプリケーションのセキュリティー保護
    6.5 REST APIとサービスのセキュリティー保護
    6.6 まとめ
    6.7 質問
    6.8 参考資料

7章 アプリケーションとKeycloakの統合
    7.1 技術要件
    7.2 統合のアーキテクチャーの選択
    7.3 統合方法の選択
    7.4 Goアプリケーションとの統合
        7.4.1 Goクライアントの設定
    7.5 Javaアプリケーションとの統合
        7.5.1 Quarkusの使用
        7.5.2 Spring Bootの使用
        7.5.3 Keycloakアダプターの使用
    7.6 JavaScriptアプリケーションとの統合
    7.7 Node.jsアプリケーションとの統合
        7.7.1 Node.jsクライアントの作成
        7.7.2 Node.jsリソースサーバーの作成
    7.8 Pythonアプリケーションとの統合
        7.8.1 Pythonクライアントの作成
        7.8.2 Pythonリソースサーバーの作成
    7.9 リバースプロキシーの利用
    7.10 独自の統合を行わないようにする
    7.11 まとめ
    7.12 質問
    7.13 参考資料

8章 認可の戦略
    8.1 認可
    8.2 RBACの使用
    8.3 GBACの使用
        8.3.1 グループメンバーシップのトークンへのマッピング
    8.4 OAuth 2.0スコープの使用
    8.5 ABACの使用
    8.6 中央集権型認可サーバーとしてのKeycloakの使用
    8.7 まとめ
    8.8 質問
    8.9 参考資料

第3部 Keycloakの設定と管理 157

9章 本番環境用のKeycloakの設定
    9.1 技術要件
    9.2 サーバーオプション
    9.3 Keycloakのホスト名の設定
        9.3.1 フロントエンドURLの設定
        9.3.2 バックエンドURLの設定
        9.3.3 管理用URLの保護
    9.4 TLSの有効化
    9.5 データベースの設定
    9.6 クラスタリングの有効化
    9.7 リバースプロキシーの設定
        9.7.1 ノードへの負荷分散
        9.7.2 クライアント情報の転送
        9.7.3 セッションアフィニティーの維持
    9.8 環境のテスト
        9.8.1 ロードバランシングとフェイルオーバーのテスト
        9.8.2 フロントエンドURLとバックエンドURLのテスト
    9.9 まとめ
    9.10 質問
    9.11 参考資料

10章 ユーザーの管理
    10.1 ローカルユーザーの管理
        10.1.1 ローカルユーザーの作成
        10.1.2 ユーザークレデンシャルの管理
        10.1.3 ユーザー情報の収集と検証
        10.1.4 セルフ登録の有効化
        10.1.5 ユーザー属性の管理
    10.2 LDAPやActive Directoryとの連携
        10.2.1 LDAPマッパー
        10.2.2 グループの同期
        10.2.3 ロールの同期
    10.3 サードパーティーのIdPとの統合
        10.3.1 OIDC IdPの作成
    10.4 ソーシャルIdPとの統合
    10.5 ユーザーによる自身のデータの管理
    10.6 まとめ
    10.7 質問
    10.8 参考資料

11章 ユーザーの認証
    11.1 技術要件
    11.2 認証フロー
        11.2.1 認証フローの設定
    11.3 パスワードの使用
        11.3.1 パスワードポリシーの変更
        11.3.2 ユーザーパスワードのリセット
    11.4 OTPの使用
        11.4.1 OTPポリシーの変更
        11.4.2 ユーザーによるOTP使用有無の選択
        11.4.3 OTPの使用の強制
    11.5 Web Authentication(WebAuthn)の使用
        11.5.1 認証フローでのWebAuthnの有効化
        11.5.2 セキュリティーデバイスの登録と認証
    11.6 強力な認証の使用
    11.7 まとめ
    11.8 質問
    11.9 参考資料

12章 トークンとセッションの管理
    12.1 技術要件
    12.2 セッションの管理
        12.2.1 セッションの有効期間の管理
        12.2.2 アクティブなセッションの管理
        12.2.3 ユーザーセッションの早期無効化
        12.2.4 Cookieの理解とセッションとの関係
    12.3 トークンの管理
        12.3.1 IDトークンとアクセストークンの有効期間の管理
        12.3.2 リフレッシュトークンの有効期間の管理
        12.3.3 リフレッシュトークンローテーションの有効化
        12.3.4 トークンの無効化
    12.4 まとめ
    12.5 質問
    12.6 参考資料

13章 Keycloakの拡張
    13.1 技術要件
    13.2 サービスプロバイダーインターフェース(SPI)
        13.2.1 カスタムプロバイダーのパッケージ化
        13.2.2 カスタムプロバイダーのインストール
        13.2.3 KeycloakSessionFactoryとKeycloakSessionコンポーネントの理解
        13.2.4 プロバイダーのライフサイクルの理解
        13.2.5 プロバイダーの設定
    13.3 見た目の変更
        13.3.1 テーマ
        13.3.2 新しいテーマの作成とデプロイ
        13.3.3 テンプレートの拡張
        13.3.4 テーマ関連SPIの拡張
    13.4 認証フローのカスタマイズ
    13.5 その他のカスタマイズポイント
    13.6 まとめ
    13.7 質問
    13.8 参考資料

第4部 セキュリティーについての考慮事項

14章 Keycloakとアプリケーションのセキュリティー保護
    14.1 Keycloakのセキュリティー保護
        14.1.1 Keycloakへの通信の暗号化
        14.1.2 Keycloakのホスト名の設定
        14.1.3 Keycloakで使用する署名鍵のローテーション
        14.1.4 Keycloakの定期的なアップデート
        14.1.5 外部VaultからKeycloakへのシークレットの読み込み
        14.1.6 ファイアーウォールと侵入防止システムによるKeycloakの保護
    14.2 データベースのセキュリティー保護
        14.2.1 ファイアーウォールによるデータベースの保護
        14.2.2 データベースの認証とアクセス制御の有効化
        14.2.3 データベースの暗号化
    14.3 クラスター通信のセキュリティー保護
        14.3.1 クラスター通信の暗号化
    14.4 ユーザーアカウントのセキュリティー保護
    14.5 アプリケーションのセキュリティー保護
        14.5.1 Webアプリケーションのセキュリティー
        14.5.2 OAuth 2.0とOIDCのベストプラクティス
        14.5.3 Keycloakクライアントの設定
    14.6 まとめ
    14.7 質問
    14.8 参考資料
日本語版補章 クライアントポリシーによるセキュリティー保護
    15.1 クライアントポリシー
    15.2 セキュリティープロファイル
    15.3 クライアントポリシーによるセキュリティープロファイルの適用
        15.3.1 準備
        15.3.2 セキュリティープロファイルの適用
        15.3.3 セキュリティープロファイルに従っていない認可リクエストの送信
        15.3.4 セキュリティープロファイルに従っている認可リクエストの送信
        15.3.5 セキュリティープロファイルの適用解除
    15.4 まとめ
    15.5 質問
    15.6 参考資料
解答
索引