認証と認可Keycloak入門 OAuth/OpenID Connectに準拠したAPI認可とシングルサインオンの実現


認証と認可 Keycloak入門 OAuth/OpenID Connectに準拠したAPI認可とシングルサインオンの実現


リックテレコム


著者:中村雄一、和田広之、田村広平、田畑義之、青柳隆、渡辺竜二、奥浦航、相田洋志


はじめに
ご案内

入門編 基礎知識を習得しよう
第1章 Keycloakを理解するための第一歩
1.1 認証・認可とKeycloakの概要
1.1.1 WebアプリケーションとREST API
1.1.2 認証と認可とは
1.1.3 Keycloakとは
1.1.4 Keycloakの機能とユースケース
1.2 Keycloakの動作要件とディレクトリー構成
1.2.1 Keycloakの動作要件
1.2.2 Keycloakのディレクトリー構成
1.3 Keycloakのセットアップと動作確認
1.3.1 Keycloakのセットアップ
1.3.2 動作確認
1.4 本章のまとめ

第2章 OAuthとOIDCの基礎知識
2.1 OAuthのフロー
2.1.1 OAuthの登場人物とAPI認可
2.1.2 OAuthのフローの種類
2.1.3 クライアントタイプ
2.1.4 認可コードフロー
2.1.5 クライアントクレデンシャルズフロー
2.1.6 リソースオーナーパスワードクレデンシャルズフロー
2.2 トークンとKeycloakでの管理
2.2.1 アクセストークンの形式
2.2.2 アクセストークンの有効期限とリフレッシュトークン
2.2.3 トークンと密接に関連するセッション
2.2.4 オフラインセッションとオフライントークン
2.3 トークンの無効化と認可判断
2.3.1 トークンの無効化
2.3.2 リソースサーバーでの認可判断
2.3.3 トークンのローカルでの検証
2.3.4 トークンイントロスペクション
2.3.5 APIゲートウェイでの認可判断
2.4 OIDCのフロー
2.4.1 OIDCのフローとOAuthとの差異
2.4.2 UserInfoエンドポイント
2.4.3 パブリッククライアントでのOIDCによるログイン
2.4.4 OIDCの関連仕様
2.5 本章のまとめ

第3章 SSOの基礎知識
3.1 SSOを理解する
3.1.1 認証連携によるSSO
3.1.2 SSOの仕組み
3.1.3 シングルログアウト
3.1.4 SSOとID管理
3.2 標準プロトコルによるSSO
3.2.1 SAMLによるSSO
3.2.2 アプリケーションのSSO対応
3.2.3 SSOの実現方式
3.2.4 SSOの実現方式の選択方法
3.3 本章のまとめ

第4章 Keycloakの基礎を理解する
4.1 Keycloakの用語解説
4.1.1 ユーザー
4.1.2 クライアント
4.1.3 セッション
4.1.4 ロール
4.1.5 グループ
4.1.6 レルム
4.1.7 クライアントアダプター
4.1.8 プロトコルマッパー
4.1.9 クライアントスコープ
4.2 セッションとトークンの有効期間の設定
4.2.1 セッションの有効期間の設定項目
4.2.2 トークンの有効期間の設定項目
4.2.3 セッションとトークンの有効期間の設定方法
4.3 公式ドキュメントとコミュニティー
4.3.1 公式ドキュメント
4.3.2 Keycloakコミュニティーの紹介
4.4 本章のまとめ

実践編 実際の3つのユースケースを題材に基本的な使い方・設定方法をマスターしよう
第5章 OAuthに従ったAPI認可の実現
5.1 API認可を実現する環境の構築
5.1.1 検証環境の概要
5.1.2 検証環境の構成要素のセットアップ
5.1.3 認可コードフローに必要な設定
5.1.4 トークンイントロスペクションに必要な設定作業
5.2 認可コードフローによるアクセストークンの取得
5.2.1 検証環境における認可コードフロー
5.2.2 認可コードフローの動作確認
5.3 API呼び出し時の認可判断とスコープの設定
5.3.1 サンプルAPIサーバーの機能
5.3.2 トークンイントロスペクション
5.3.3 スコープによる認可判断
5.3.4 スコープの設定方法
5.3.5 ReadData APIの動作確認
5.4 トークンのリフレッシュと無効化
5.4.1 トークンのリフレッシュ
5.4.2 オフライントークンの利用
5.4.3 トークンの無効化
5.5 OAuth/OIDCのセキュリティー確保
5.5.1 OIDCの利用
5.5.2 認可コードフロー利用時の課題と対策の概要
5.5.3 認可リクエストと認可コードの関連付け:「state」パラメーター
5.5.4 認可リクエストとトークンリクエストの関連付け:PKCE
5.5.5 認可リクエストとIDトークンの関連付け:「nonce」パラメーター
5.5.6 さらに高度なセキュリティー機能
5.6 API認可で重要なKeycloakの利用方法
5.6.1 認可コードフロー以外のフローの利用方法
5.6.2 Audienceを使った認可判断のためのaudクレームの設定
5.7 本章のまとめ

第6章 SSOを実現する
6.1 はじめに
6.2 Javaアダプターを用いたSSO
6.2.1 Javaアダプターの概要
6.2.2 Keycloakと連携後の構成
6.2.3 Keycloakとの連携手順
6.2.4 動作検証
6.3 リバースプロキシーを用いたSSO
6.3.1 mod_auth_openidcの概要
6.3.2 Keycloakと連携後の構成
6.3.3 Keycloakとの連携手順
6.3.4 動作検証
6.4 JavaScriptアダプターを用いたSSO
6.4.1 JavaScriptアダプターとリソースサーバーの概要
6.4.2 Keycloakと連携後の構成
6.4.3 Keycloakとの連携手順
6.4.4 動作検証
6.5 標準プロトコル対応アプリケーションのSSO
6.5.1 Keycloakと連携後の構成
6.5.2 Keycloakとの連携手順
6.5.3 動作検証
6.6 SSOとSLOの動作確認
6.6.1 SSOの動作確認
6.6.2 SLOの動作確認
6.7 その他のSSOの動向と概略
6.7.1 ネイティブアプリケーションのSSO
6.7.2 レガシーアプリケーションのSSO
6.8 本章のまとめ

第7章 さまざまな認証方式を用いる
7.1 認証の強化
7.1.1 認証フローの考え方
7.1.2 ワンタイムパスワード(OTP)による認証の構成
7.1.3 OTPによる認証の設定
7.1.4 OTPによる認証の動作検証
7.1.5 WebAuthnによる認証の構成
7.1.6 WebAuthnによる認証の設定
7.1.7 WebAuthnによる認証の動作検証
7.2 外部ユーザーストレージによる認証
7.2.1 ユーザーストレージフェデレーション
7.2.2 Active Directory連携の構成
7.2.3 Active Directory連携の設定手順
7.2.4 Active Directory連携の動作検証
7.2.5 統合Windows認証の構成
7.2.6 統合Windows認証の設定手順
7.2.7 統合Windows認証の動作検証
7.3 外部アイデンティティープロバイダーによる認証
7.3.1 アイデンティティーブローカリングの概要
7.3.2 GitHubとの連携の構成
7.3.3 GitHubとの連携手順
7.3.4 GitHub連携の動作検証
7.4 本章のまとめ

応用編 実システム利用を見据えた使い方を知ろう
第8章 Keycloakのカスタマイズ
8.1 カスタマイズの可能な箇所と仕組み
8.1.1 カスタマイズの可能な箇所
8.1.2 テーマ
8.1.3 SPI
8.2 画面のカスタマイズ
8.2.1 画面のカスタマイズのための準備
8.2.2 画面のカスタマイズ
8.2.3 テーマのデプロイ
8.3 SPIの既存プロバイダーの活用
8.3.1 Hostname SPIプロバイダー
8.3.2 Metrics SPIプロバイダー
8.4 SPIの新規プロバイダーの開発
8.4.1 事前準備(Twilioアカウントの作成)
8.4.2 認証処理のカスタマイズの流れ
8.4.3 テーマの作成
8.4.4 オーセンティケーターの作成
8.4.5 テーマとオーセンティケーターのビルド
8.4.6 テーマとオーセンティケーターのデプロイ
8.4.7 管理コンソールでの設定
8.4.8 動作確認
8.5 Keycloakのビルド
8.5.1 事前準備
8.5.2 Keycloakのビルド
8.5.3 モジュール単位でのビルド
8.6 本章のまとめ

第9章 Keycloakの非機能面の考慮ポイント
9.1 HA構成
9.1.1 外部DBを利用するための設定
9.1.2 クラスター間のキャッシュ共有
9.1.3 リクエスト情報の転送設定
9.1.4 HA構成の動作確認
9.2 HTTPSの設定
9.2.1 HTTPS通信の実現方式
9.2.2 HTTPSの設定
9.2.3 動作確認
9.3 管理コンソールのアクセス制御
9.3.1 アクセス制御の設定方法
9.3.2 アクセス制御の動作確認
9.4 ログとイベント
9.4.1 サーバーログ
9.4.2 アクセスログ
9.4.3 監査ログ
9.5 アップグレード
9.5.1 Keycloakサーバーのアップグレード
9.5.2 クライアントアダプターのアップグレード
9.6 本章のまとめ

COLUMN
ツールチップ
日本語での表示
Keycloakにおけるリフレッシュトークンの利用
エンタープライズ分野とコンシューマー分野の違い
SLOは難しい
OSSによるIDMとIGAの実現
OIDCとSAMLの使い分け
クラウドサービスの認証・認可サービスとの違いについて
ログイン画面とパスワードポリシーの設定
管理REST API
デフォルトの署名アルゴリズムと鍵管理
「web-origins」スコープ マッパーの設定
クライアントでのcode_verifier、code_challengeの生成について
クライアントロールを使ったaudクレームの設定
管理CLIと設定ファイル
プレースホルダー付きメッセージ
-DskipTestsと-Dmaven.test.skip
Keycloakが管理するさまざまなセッションの関係性
logging.propertiesに関する注意事項
audit.log?
変更内容の確認
OpenID Connect 互換モード

書籍目次

Posted by shi-n