© Hitachi, Ltd. 2022. All rights reserved.
Keycloakの部
~ Keycloakのステップアップ認証について ~
OSSセキュリティ技術の会 第11回勉強会
株式会社 日立製作所
田畑 義之
1
© Hitachi, Ltd. 2022. All rights reserved.
自己紹介
田畑 義之 (たばた よしゆき)
 株式会社 日立製作所 アーキテクチャセンタ
 ソフトウェアエンジニア
 GitHub: @y-tabata, Qiita: @yo-tabata
• 認証認可やAPI関連分野のソリューション開発&コンサルティング
 金融、公共、社会、産業分野における
API管理基盤や認証認可システムの導入支援
• 認証認可・API管理関連のOSSへのコントリビュート
 Keycloak (IAMのOSS)
 3scale (API管理のOSS)
• 情報発信
 Keycloak書籍
 ThinkIT/@ITでのWeb記事連載
 Apidays/Open Source Summit/CloudNative Daysなど、国内外のイベントでの登壇
© Hitachi, Ltd. 2022. All rights reserved.
Contents
2
1. 「実践 Keycloak ―OpenID Connect、OAuth 2.0を利用
したモダンアプリケーションのセキュリティー保護」
のご紹介
2. Keycloakのステップアップ認証
© Hitachi, Ltd. 2022. All rights reserved.
Contents
3
1. 「実践 Keycloak ―OpenID Connect、OAuth 2.0を利用
したモダンアプリケーションのセキュリティー保護」
のご紹介
2. Keycloakのステップアップ認証
4
© Hitachi, Ltd. 2022. All rights reserved.
• 実践 Keycloak
OpenID Connect、OAuth 2.0を利用したモダンアプリケーションのセキュリティー保護
https://www.amazon.co.jp/dp/4814400098
• KeycloakのプロジェクトリーダーのStianとコアディベロッパーのPedroが書いた「Keycloak -
Identity and Access Management for Modern Applications」の日本語翻訳本。
• 翻訳者は、日本人Keycloakコントリビューター4名。
• NRIの和田さん(この後登場)
• NRIの田村さん
• 日立の乗松さん(メンテナ―)
• 日立の田畑(私)
• ただの翻訳本ではない。
• 原書はKeycloak 12.0.4&WildFlyベースの構成であったが、古いため、
Keycloak 18.0.2&Quarkusベースの構成に刷新。
• クライアントポリシーを使ってFAPIなどのセキュリティープロファイルを適用する方法を
説明した日本語版補章「クライアントポリシーによるセキュリティー保護」を新規追加。
書籍のご紹介 (1/2)
5
© Hitachi, Ltd. 2022. All rights reserved.
• 実践 Keycloak
OpenID Connect、OAuth 2.0を利用したモダンアプリケーションのセキュリティー保護
https://www.amazon.co.jp/dp/4814400098
• 前回の第10回勉強会でご紹介した「認証と認可 Keycloak入門」との違い
• より実践的な内容になっています。
• 実際のKeycloakの活用方法について、ソースコードからしか知り得なかった
ような情報も織り交ぜながらご紹介しています。
• どうユーザーを認証/ログアウトするか
• どうアプリケーションと統合するか
• どうアプリケーション/ユーザーを認可するか
• どうアプリケーションのセキュリティーを保護するか
• どう本番環境を構築するか
• さまざまな機能を試すことができるコードリポジトリーも公開しています。※こちらもKC18対応
済み。
https://github.com/Keycloak-IAM-4-Modern-Apps-JP/Keycloak-Identity-and-Access-
Management-for-Modern-Applications
書籍のご紹介 (2/2)
© Hitachi, Ltd. 2022. All rights reserved.
Contents
6
1. 「実践 Keycloak ―OpenID Connect、OAuth 2.0を利用
したモダンアプリケーションのセキュリティー保護」
のご紹介
2. Keycloakのステップアップ認証
7
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証とは
• ステップアップ認証とは、必要に応じて追加の認証方法を設定できる機能です。
• Keycloak 18でサポートされた機能で、ページ数の都合上、書籍ではチラッとしか登場しな
いため、ここでご紹介したいと思います。
• 例えば以下のようなシチュエーションで便利です。
• 扱う情報の重要度によって、認証の強度を変えたい。
→ 氏名やメールアドレス参照時はパスワード認証のみとし、
口座残高参照時は生体認証を追加する。
• 不正アクセスによる情報漏えいを軽減したい。
→ いつもとは異なるIPアドレスからのアクセスには、念のためOTP認証を追加する。
• これらをSPI※のカスタマイズなしで設定できるようになりました!
※Keycloak本体のソースコードを改変することなく、さまざまな機能をKeycloakに追加できる仕組み。
8
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証の設定方法 (1/3)
• Keycloakの設定方法
① ステップアップ認証用の認証フロー定義を作成する
② ACRとLoAのマッピングを作成する
ACR: 認証方法を区別するための識別子。OIDCに定義されている。
LoA: 認証のレベル(Level of Authentication)を表す数値。Keycloak内部で認証のレベル
の上下を比較するために使われる。
※基本的に両方ともレルム単位で設定する。クライアント単位での設定上書きも可能。
9
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証の設定方法 (2/3)
• Keycloakの設定方法
① ステップアップ認証用の認証フロー定義を作成する
LoAが1の場合、
パスワード認証をする。
LoAが2の場合、
パスワード認証と
OTP認証をする。
10
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証の設定方法 (3/3)
• Keycloakの設定方法
② ACRとLoAのマッピングを作成する
ACR: silver = LoA: 1
ACR: gold = LoA: 2
11
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証の流れ (1/7)
クライアント/RP
• 例: OAuth 2.0/OIDCの認可コードフローの場合
認可サーバー/OP リソースサーバー
リソースオーナ―/
エンドユーザーの
ブラウザー
認可/認証リクエスト
認可/認証レスポンス
パスワード認証
OTP認証
トークンリクエ
スト
APIリクエスト
12
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証の流れ (2/7)
クライアント/RP
• 例: OAuth 2.0/OIDCの認可コードフローの場合
認可サーバー/OP リソースサーバー
リソースオーナ―/
エンドユーザーの
ブラウザー
認可/認証リクエスト
認可/認証レスポンス
パスワード認証
OTP認証
トークンリクエ
スト
APIリクエスト
認可/認証リクエストにacr_valuesを
付けて、認証のレベルを指定できる。
----
GET /auth HTTP/1.1
Host: Keycloak
response_type=code
&client_id=<クライアントID>
&redirect_uri=<リダイレクトURI>
&scope=openid
&acr_values=silver | gold
※claimsパラメータも可。
13
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証の流れ (3/7)
クライアント/RP
• 例: OAuth 2.0/OIDCの認可コードフローの場合
認可サーバー/OP リソースサーバー
リソースオーナ―/
エンドユーザーの
ブラウザー
認可/認証リクエスト
認可/認証レスポンス
パスワード認証
OTP認証
トークンリクエ
スト
APIリクエスト
14
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証の流れ (4/7)
クライアント/RP
• 例: OAuth 2.0/OIDCの認可コードフローの場合
認可サーバー/OP リソースサーバー
リソースオーナ―/
エンドユーザーの
ブラウザー
認可/認証リクエスト
認可/認証レスポンス
パスワード認証
OTP認証
トークンリクエ
スト
APIリクエスト
acr_valuesがgoldだった場合
15
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証の流れ (5/7)
クライアント/RP
• 例: OAuth 2.0/OIDCの認可コードフローの場合
認可サーバー/OP リソースサーバー
リソースオーナ―/
エンドユーザーの
ブラウザー
認可/認証リクエスト
認可/認証レスポンス
パスワード認証
OTP認証
トークンリクエ
スト
APIリクエスト
16
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証の流れ (6/7)
クライアント/RP
• 例: OAuth 2.0/OIDCの認可コードフローの場合
認可サーバー/OP リソースサーバー
リソースオーナ―/
エンドユーザーの
ブラウザー
認可/認証リクエスト
認可/認証レスポンス
パスワード認証
OTP認証
トークンリクエ
スト
APIリクエスト
IDトークンのacrクレームにsilver | gold
という値が格納される。
これによりクライアント/RPは、
適切なレベルの認証がなされたことを
確認できる。
17
© Hitachi, Ltd. 2022. All rights reserved.
ステップアップ認証の流れ (7/7)
クライアント/RP
• 例: OAuth 2.0/OIDCの認可コードフローの場合
認可サーバー/OP リソースサーバー
リソースオーナ―/
エンドユーザーの
ブラウザー
認可/認証リクエスト
認可/認証レスポンス
パスワード認証
OTP認証
トークンリクエ
スト
APIリクエスト
アクセストークンのacrクレームに
silver | gold という値が格納される。
これによりリソースサーバーは、
適切なレベルの認証がなされたことを
確認できる。
※Keycloakのアクセストークンは
アサーション型(JWT)。
アクセストークンのacrクレームは
RFC 9068に準拠した形。
18
© Hitachi, Ltd. 2022. All rights reserved.
(デモ)
ステップアップ認証の流れを実際に見てみよう!
19
© Hitachi, Ltd. 2022. All rights reserved.
まとめ
- 新書籍「実践 Keycloak ―OpenID Connect、OAuth 2.0を利用したモダンアプリ
ケーションのセキュリティー保護」をご紹介しました。
https://www.amazon.co.jp/dp/4814400098
- Keycloakを使ったステップアップ認証の方法をデモを交えてご紹介しました。
20
© Hitachi, Ltd. 2022. All rights reserved.
Trademarks
• OpenID is a trademark or registered trademark of OpenID Foundation in the United States and other
countries.
• GitHub is a trademark or registered trademark of GitHub, Inc. in the United States and other
countries.
• Other brand names and product names used in this material are trademarks, registered trademarks,
or trade names of their respective holders.
Keycloakのステップアップ認証について

Keycloakのステップアップ認証について

  • 1.
    © Hitachi, Ltd.2022. All rights reserved. Keycloakの部 ~ Keycloakのステップアップ認証について ~ OSSセキュリティ技術の会 第11回勉強会 株式会社 日立製作所 田畑 義之
  • 2.
    1 © Hitachi, Ltd.2022. All rights reserved. 自己紹介 田畑 義之 (たばた よしゆき)  株式会社 日立製作所 アーキテクチャセンタ  ソフトウェアエンジニア  GitHub: @y-tabata, Qiita: @yo-tabata • 認証認可やAPI関連分野のソリューション開発&コンサルティング  金融、公共、社会、産業分野における API管理基盤や認証認可システムの導入支援 • 認証認可・API管理関連のOSSへのコントリビュート  Keycloak (IAMのOSS)  3scale (API管理のOSS) • 情報発信  Keycloak書籍  ThinkIT/@ITでのWeb記事連載  Apidays/Open Source Summit/CloudNative Daysなど、国内外のイベントでの登壇
  • 3.
    © Hitachi, Ltd.2022. All rights reserved. Contents 2 1. 「実践 Keycloak ―OpenID Connect、OAuth 2.0を利用 したモダンアプリケーションのセキュリティー保護」 のご紹介 2. Keycloakのステップアップ認証
  • 4.
    © Hitachi, Ltd.2022. All rights reserved. Contents 3 1. 「実践 Keycloak ―OpenID Connect、OAuth 2.0を利用 したモダンアプリケーションのセキュリティー保護」 のご紹介 2. Keycloakのステップアップ認証
  • 5.
    4 © Hitachi, Ltd.2022. All rights reserved. • 実践 Keycloak OpenID Connect、OAuth 2.0を利用したモダンアプリケーションのセキュリティー保護 https://www.amazon.co.jp/dp/4814400098 • KeycloakのプロジェクトリーダーのStianとコアディベロッパーのPedroが書いた「Keycloak - Identity and Access Management for Modern Applications」の日本語翻訳本。 • 翻訳者は、日本人Keycloakコントリビューター4名。 • NRIの和田さん(この後登場) • NRIの田村さん • 日立の乗松さん(メンテナ―) • 日立の田畑(私) • ただの翻訳本ではない。 • 原書はKeycloak 12.0.4&WildFlyベースの構成であったが、古いため、 Keycloak 18.0.2&Quarkusベースの構成に刷新。 • クライアントポリシーを使ってFAPIなどのセキュリティープロファイルを適用する方法を 説明した日本語版補章「クライアントポリシーによるセキュリティー保護」を新規追加。 書籍のご紹介 (1/2)
  • 6.
    5 © Hitachi, Ltd.2022. All rights reserved. • 実践 Keycloak OpenID Connect、OAuth 2.0を利用したモダンアプリケーションのセキュリティー保護 https://www.amazon.co.jp/dp/4814400098 • 前回の第10回勉強会でご紹介した「認証と認可 Keycloak入門」との違い • より実践的な内容になっています。 • 実際のKeycloakの活用方法について、ソースコードからしか知り得なかった ような情報も織り交ぜながらご紹介しています。 • どうユーザーを認証/ログアウトするか • どうアプリケーションと統合するか • どうアプリケーション/ユーザーを認可するか • どうアプリケーションのセキュリティーを保護するか • どう本番環境を構築するか • さまざまな機能を試すことができるコードリポジトリーも公開しています。※こちらもKC18対応 済み。 https://github.com/Keycloak-IAM-4-Modern-Apps-JP/Keycloak-Identity-and-Access- Management-for-Modern-Applications 書籍のご紹介 (2/2)
  • 7.
    © Hitachi, Ltd.2022. All rights reserved. Contents 6 1. 「実践 Keycloak ―OpenID Connect、OAuth 2.0を利用 したモダンアプリケーションのセキュリティー保護」 のご紹介 2. Keycloakのステップアップ認証
  • 8.
    7 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証とは • ステップアップ認証とは、必要に応じて追加の認証方法を設定できる機能です。 • Keycloak 18でサポートされた機能で、ページ数の都合上、書籍ではチラッとしか登場しな いため、ここでご紹介したいと思います。 • 例えば以下のようなシチュエーションで便利です。 • 扱う情報の重要度によって、認証の強度を変えたい。 → 氏名やメールアドレス参照時はパスワード認証のみとし、 口座残高参照時は生体認証を追加する。 • 不正アクセスによる情報漏えいを軽減したい。 → いつもとは異なるIPアドレスからのアクセスには、念のためOTP認証を追加する。 • これらをSPI※のカスタマイズなしで設定できるようになりました! ※Keycloak本体のソースコードを改変することなく、さまざまな機能をKeycloakに追加できる仕組み。
  • 9.
    8 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証の設定方法 (1/3) • Keycloakの設定方法 ① ステップアップ認証用の認証フロー定義を作成する ② ACRとLoAのマッピングを作成する ACR: 認証方法を区別するための識別子。OIDCに定義されている。 LoA: 認証のレベル(Level of Authentication)を表す数値。Keycloak内部で認証のレベル の上下を比較するために使われる。 ※基本的に両方ともレルム単位で設定する。クライアント単位での設定上書きも可能。
  • 10.
    9 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証の設定方法 (2/3) • Keycloakの設定方法 ① ステップアップ認証用の認証フロー定義を作成する LoAが1の場合、 パスワード認証をする。 LoAが2の場合、 パスワード認証と OTP認証をする。
  • 11.
    10 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証の設定方法 (3/3) • Keycloakの設定方法 ② ACRとLoAのマッピングを作成する ACR: silver = LoA: 1 ACR: gold = LoA: 2
  • 12.
    11 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証の流れ (1/7) クライアント/RP • 例: OAuth 2.0/OIDCの認可コードフローの場合 認可サーバー/OP リソースサーバー リソースオーナ―/ エンドユーザーの ブラウザー 認可/認証リクエスト 認可/認証レスポンス パスワード認証 OTP認証 トークンリクエ スト APIリクエスト
  • 13.
    12 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証の流れ (2/7) クライアント/RP • 例: OAuth 2.0/OIDCの認可コードフローの場合 認可サーバー/OP リソースサーバー リソースオーナ―/ エンドユーザーの ブラウザー 認可/認証リクエスト 認可/認証レスポンス パスワード認証 OTP認証 トークンリクエ スト APIリクエスト 認可/認証リクエストにacr_valuesを 付けて、認証のレベルを指定できる。 ---- GET /auth HTTP/1.1 Host: Keycloak response_type=code &client_id=<クライアントID> &redirect_uri=<リダイレクトURI> &scope=openid &acr_values=silver | gold ※claimsパラメータも可。
  • 14.
    13 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証の流れ (3/7) クライアント/RP • 例: OAuth 2.0/OIDCの認可コードフローの場合 認可サーバー/OP リソースサーバー リソースオーナ―/ エンドユーザーの ブラウザー 認可/認証リクエスト 認可/認証レスポンス パスワード認証 OTP認証 トークンリクエ スト APIリクエスト
  • 15.
    14 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証の流れ (4/7) クライアント/RP • 例: OAuth 2.0/OIDCの認可コードフローの場合 認可サーバー/OP リソースサーバー リソースオーナ―/ エンドユーザーの ブラウザー 認可/認証リクエスト 認可/認証レスポンス パスワード認証 OTP認証 トークンリクエ スト APIリクエスト acr_valuesがgoldだった場合
  • 16.
    15 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証の流れ (5/7) クライアント/RP • 例: OAuth 2.0/OIDCの認可コードフローの場合 認可サーバー/OP リソースサーバー リソースオーナ―/ エンドユーザーの ブラウザー 認可/認証リクエスト 認可/認証レスポンス パスワード認証 OTP認証 トークンリクエ スト APIリクエスト
  • 17.
    16 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証の流れ (6/7) クライアント/RP • 例: OAuth 2.0/OIDCの認可コードフローの場合 認可サーバー/OP リソースサーバー リソースオーナ―/ エンドユーザーの ブラウザー 認可/認証リクエスト 認可/認証レスポンス パスワード認証 OTP認証 トークンリクエ スト APIリクエスト IDトークンのacrクレームにsilver | gold という値が格納される。 これによりクライアント/RPは、 適切なレベルの認証がなされたことを 確認できる。
  • 18.
    17 © Hitachi, Ltd.2022. All rights reserved. ステップアップ認証の流れ (7/7) クライアント/RP • 例: OAuth 2.0/OIDCの認可コードフローの場合 認可サーバー/OP リソースサーバー リソースオーナ―/ エンドユーザーの ブラウザー 認可/認証リクエスト 認可/認証レスポンス パスワード認証 OTP認証 トークンリクエ スト APIリクエスト アクセストークンのacrクレームに silver | gold という値が格納される。 これによりリソースサーバーは、 適切なレベルの認証がなされたことを 確認できる。 ※Keycloakのアクセストークンは アサーション型(JWT)。 アクセストークンのacrクレームは RFC 9068に準拠した形。
  • 19.
    18 © Hitachi, Ltd.2022. All rights reserved. (デモ) ステップアップ認証の流れを実際に見てみよう!
  • 20.
    19 © Hitachi, Ltd.2022. All rights reserved. まとめ - 新書籍「実践 Keycloak ―OpenID Connect、OAuth 2.0を利用したモダンアプリ ケーションのセキュリティー保護」をご紹介しました。 https://www.amazon.co.jp/dp/4814400098 - Keycloakを使ったステップアップ認証の方法をデモを交えてご紹介しました。
  • 21.
    20 © Hitachi, Ltd.2022. All rights reserved. Trademarks • OpenID is a trademark or registered trademark of OpenID Foundation in the United States and other countries. • GitHub is a trademark or registered trademark of GitHub, Inc. in the United States and other countries. • Other brand names and product names used in this material are trademarks, registered trademarks, or trade names of their respective holders.