More Related Content
PDF
PPTX
KeycloakでFAPIに対応した高セキュリティなAPIを公開する PPTX
PDF
PDF
なぜOpenID Connectが必要となったのか、その歴史的背景 PDF
PDF
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜 PDF
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15 What's hot
PPTX
PPTX
NGINXをBFF (Backend for Frontend)として利用した話 PPTX
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~ PDF
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021 PPTX
PDF
マルチテナント化で知っておきたいデータベースのこと PDF
実装して理解するLINE LoginとOpenID Connect入門 PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話 PDF
PDF
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014 PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~ PDF
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~ PDF
PDF
これからSpringを使う開発者が知っておくべきこと PDF
ストリーム処理を支えるキューイングシステムの選び方 PDF
PDF
怖くないSpring Bootのオートコンフィグレーション Similar to KeycloakでAPI認可に入門する
PDF
OAuth 2.0のResource Serverの作り方 PDF
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws PPTX
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 PDF
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside PDF
FAPI (Financial-grade API) and CIBA (Client Initiated Backchannel Authenticat... PPTX
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 PDF
PDF
PPTX
PPTX
Keycloak入門-OpenID ConnectによるAPIセキュリティ PPTX
Idcon25 FIDO2 の概要と YubiKey の実装 PDF
Authentication and Authorization of The Latest Keycloak PDF
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~ PDF
株式会社カサレアル 山本による講演「認証・認可におけるKeycloakの活用」の資料 PDF
Financial-grade API Hands-on with Authlete PDF
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api PDF
FAPI and Beyond: From an specification author's point of view #fapisum - Japa... PDF
PDF
利用者本位のAPI提供に向けたアイデンティティ (ID) 標準仕様の動向 More from Hitachi, Ltd. OSS Solution Center.
PPTX
PDF
PDF
KubeConRecap_nakamura.pdf PDF
Guide of authentication and authorization for cloud native applications with ... PPTX
Security Considerations for API Gateway Aggregation PPTX
Why Assertion-based Access Token is preferred to Handle-based one? PPTX
Challenge to Implementing "Scalable" Authorization with Keycloak PDF
KeycloakのCNCF incubating project入りまでのアップストリーム活動の歩み PPTX
Exploring Best Practices for Implementing Authn and Authz in a Cloud-Native E... PDF
KubeCon + CloudNativeCon North America セキュリティ周りrecap PPTX
Securing Model Context Protocol with Keycloak: AuthN/AuthZ for MCP Servers PPTX
Mastering Authorization: Integrating Authentication and Authorization Data in... PPTX
How Does a Workload Authenticate an API Request?: Implementing Transaction To... PPTX
Hitachi’s Keycloak Journey - Evolution of Business and Community PDF
KubeCon NA 2023 Recap: Challenge to Implementing “Scalable” Authorization wit... PDF
Securing AI Agent Infrastructure: AuthN/AuthZ Patterns for MCP and A2A PDF
Secure Authorization for Agentic AI in Multi-Domain Environments PDF
Exploring Best Practice for Implementing Authn and Authz in a Cloud-Native En... PPTX
CloudNativeSecurityCon North America 2024 Overview PDF
Let’s Join Cloud Native Computing Foundation TAG Security APAC! KeycloakでAPI認可に入門する
- 1.
© Hitachi, Ltd.2022. All rights reserved.
KeycloakでAPI認可に入門する
OSSセキュリティ技術の会第10回勉強会 【オンライン】
2022/02/09
日立製作所 OSSソリューションセンタ
中村 雄一
田畑 義之
- 2.
© Hitachi, Ltd.2022. All rights reserved.
Contents
1
1. Keycloakとは
2. API認可の基礎
3. Keycloakの基本概念
4. API認可をKeycloakで試す
- 3.
2
© Hitachi, Ltd.2022. All rights reserved.
Webベースのシステム
Webアプリ
ケーション
Webシステム
ブラウザー
ネイティブ
アプリ
REST API
ユーザー
他システム
HTTPリクエスト
HTML画面
HTTPリクエスト(REST)
処理結果
マイクロサービス
サービス サービス
サービス
HTTPリクエスト(REST)
処理結果
- 4.
3
© Hitachi, Ltd.2022. All rights reserved.
認証と認可
ユーザー クレデンシャルを提示
(ユーザー名とパスワード等)
システム
(インターネットバンキング)
Webアプリケーション
(銀行Web)
REST API
(残高照会 API)
外部アプリケーション
(家計簿アプリ)
残高照会メニュー操作
残高照会API呼び出し
家計簿アプリに
残高照会を認可
残高情報
①認証
誰かを確認
②認可
アクセス権を与える
③認可判断
権限の確認
- 5.
4
© Hitachi, Ltd.2022. All rights reserved.
Keycloakとは
• OSSの「IAM(Identity and Access Management)」のソフトウェア
https://www.keycloak.org/
• コミュニティが活発・オープンで、商用利用も広く進んでいる
日本人のメンテナも!(乗松さん@日立)
• 最新標準にも対応。v15.0では、OpenID FoundationのFAPI, FAPI-CIBA,
Open Banking Brasil FAPIという仕様にも正式対応。
https://openid.net/certification/
• 豊富な機能
分類 機能 概要
認証 認証情報管理 認証に必要なユーザ名・属性情報を管理
パスワード認証 ユーザ名・パスワードに基づき認証
多要素認証 OTP(FreeOTPベース)や、WebAuthnに基づいた多要素認証を提供
外部連携 外部の認証情報と連携して認証する
認可 権限管理 ユーザやアプリに紐づく権限を管理
認可サービス 権限とリソースの紐づけを管理し、認可判断を実行する
認証・認可連携
プロトコル
OAuth 2.0
認可サーバ
APIの認可サーバとして必要なエンドポイントを提供(認可エンドポイ
ント、トークンエンドポイント、トークン失効エンドポイント等)
OpenID Connect OP OpenID ConnectのOPサーバとしての機能を提供
SAML IdP SAMLのIdPサーバとしての機能を提供
カスタマイズ
ポイント
SPI 様々な拡張を作りこむためのJavaのインタフェース
クライアントポリシー クライアント毎に異なった振る舞いをKeycloakに持たせるための拡張
フレームワーク
アプリ用
ライブラリ
クライアントアダプタ アプリにOpenID Connect RP,SAML SPの機能を持たせたり、認可
サービスのクライアント機能を持たせるアプリ用ライブラリ
- 6.
5
© Hitachi, Ltd.2022. All rights reserved.
Keycloakでできること
Webアプリ
A
Webアプリ
B
Webアプリ
C
システム
Keycloak
認証
処理
認可
処理
REST API
群
認証や
認可の
委譲
外部の
クレデンシャル
ソーシャル
サイトの認証
Keycloak内の
クレデンシャル
ユースケース①
OAuth2.0の枠組みに
適切に従った「API認可」
ユースケース②
クレデンシャルの入力は
一度だけ「SSO」
ユースケース③
外部のクレデンシャルや
認証システムとの連携
連
携
- 7.
6
© Hitachi, Ltd.2022. All rights reserved.
Keycloakの構成
Keycloak
JDK
Wildfly [アプリケーションサーバー]
JDBC
ドライバー
OS
RDB
この単位のzipファイルが配布
Keycloakの設定情報を格納。
デフォルトではH2という
DBが配布物に含まれている。
本番用途では外部DBが推奨
Quarkusという軽量なアプリケーションサーバ
で動くものも開発中
- 8.
7
© Hitachi, Ltd.2022. All rights reserved.
Keycloakのインストール
・ 公式サイトよりzipまたはtar.gzをダウンロード。
書籍で使っているバージョンは15.0.2。本勉強会時点の最新版は16.1.0
・ 前提環境: Java(JDK 8以上)。最低でも512MのRAMと1Gのディスク容量
・ インストール&起動 (Windowsの場合)
zipを展開し、コマンドプロンプトで展開したディレクトリに移動し、
.binstandalone.bat
とするだけ。
- 9.
8
© Hitachi, Ltd.2022. All rights reserved.
管理者ユーザーを作成
ウェルカムページ(http://localhost:8080/)をブラウザで開き、管理者ユーザーを作成
ユーザー名とパスワードを入力し
管理者ユーザーを作成
- 10.
9
© Hitachi, Ltd.2022. All rights reserved.
管理コンソールにログイン
・ Keycloakの設定は管理コンソールから行う。
・ ウェルカムページから「Administration Console」を選択し、管理者ユーザーでログイン
- 11.
10
© Hitachi, Ltd.2022. All rights reserved.
レルム作成: レルムとは
「レルム」とはKeycloak の管理単位のことで、ユーザーなどの情報はレルム単位で管理。
「master」レルムは、すべてのレルムを管理できる特別なレルム(先ほどは「master」レルム)
任意にレルムを作成して管理ができ(部署単位、用途単位等)、マルチテナントのような使い方もできる。
Keycloakサーバー
master レルム
department A レルム
department B レルム
クライアント
ユーザー
レルムの設定
グループ
セッション
ロール
管理者ユーザー
クライアント
ユーザー
レルムの設定
グループ
セッション
ロール
…
- 12.
- 13.
- 14.
© Hitachi, Ltd.2022. All rights reserved.
Contents
13
1. Keycloakとは
2. API認可の基礎
3. Keycloakの基本概念
4. API認可をKeycloakで試す
- 15.
14
© Hitachi, Ltd.2022. All rights reserved.
API認可とは
・ API 認可: API 呼び出しを行う際の認可
・ API認可では、「OAuth 2.0」が広く使われている。
・ OAuth 2.0 (以下OAuth)
ユーザーのリソース(protected resource)へのアクセスを
外部アプリケーション(3rd party application)に認可するためのプロトコル
RFC6749で規定
- 16.
15
© Hitachi, Ltd.2022. All rights reserved.
OAuthの登場人物とAPI認可
認可サーバー
(Keycloak)
クライアント
(家計簿アプリ)
リソースサーバー
(X銀行残高照会API)
アクセスへの
同意
API呼び出し
(w/ アクセストークン)
アクセストークン発行
(read_balanceスコープ付き)
リソースオーナー
(ブラウザー)
① リソースオーナーが
家計簿アプリに残高情報へのア
クセス権を認可
② 認可された証拠となる
トークンを発行
③ トークンの提示
リソース
(残高情報)
④ トークンをもとに
認可判断
★アクセストークン:
API を呼び出すときに使う「認可された証拠」
リソースアクセスがクライアントに認可されたかを示す 「スコープ(scope)」が関連付けられている。
OAuthではアクセストークン発行のためのフローをいくつか規定
- 17.
16
© Hitachi, Ltd.2022. All rights reserved.
OAuthの典型的なフロー : 認可コードフロー
クライアント
(例:家計簿アプリ)
2. 認可リクエスト
(w/クライアントID、スコープ、
リダイレクトURI)
認可サーバー
(Keycloak)
3. ユーザー認証、4. 同意の取得
5. 認可レスポンス
(w/認可コード)
リソースオーナー
(ブラウザー)
1. API連携指示
6. トークンリクエスト
(w/認可コード、クライアントID、
クライアントシークレット)
8. トークンレスポンス
(w/アクセストークン、
リフレッシュトークン)
クライアントID・シークレット リダイレクトURI
リソースサーバー
(例:X銀行残高照会API)
9. API呼び出し (w/アクセストークン)
事前に認可サーバーが発行 認可サーバに事前登録
Keycloakでは
Valid Redirect URIsに登録
家計簿メニュー
残高更新
7. クライアント認証と
認可コード・リダイレクトURIの確認
Keycloakの場合:
ブラウザとKeycloakの間に
セッション確立
認可エンドポイント
リダイレクトURI。
クライアントに実装 トークン
エンドポイント
X銀行ログイン
ID
pass
家計簿アプリが
以下のアクセス
を求めています
残高照会
許可する
X銀行残高連携
家計簿メニュー
- 18.
17
© Hitachi, Ltd.2022. All rights reserved.
Keycloakにおけるアクセストークン
eyJhbGc<略> NmxRIn0. eyJleHA<略>JteRq5n.eyJhbOi<略>7JqzJwbg
ヘッダー
(Base64URLエンコード)
ペイロード(JWT)
(Base64URLエンコード)
署名
(Base64URLエンコード)
{
"alg": "RS256",
"typ": "JWT",
"kid":"SPeVQvHYuixD2g-
vgNvnaZdBFHqmP25N_t5o2Ly
5Es"
}
{
"exp" : 1634452276,
"iat" : 1634451676,
"auth_time" : 1634450659,
"iss" : "https://api.example.com/auth/realms/demo",
"aud" : "account",
"sub" : "e7565c5c-3bcf-4a52-8746-c8ef4b940545",
"azp" : "demo-client",
"scope" : "profile email",
"preferred_username" : "user-api"
}
署名検証に必要な情報等が
含まれる
トークンの有効期限やスコープなどが含まれる。
各項目はクレームと呼ばれる
アクセストークンの形式は任意だがKeycloakではJWSを採用
- 19.
18
© Hitachi, Ltd.2022. All rights reserved.
リフレッシュトークン
・ アクセストークンには有効期限があり、短くすることが推奨(数分、数十分)
期限が切れるたびに認可コードフローで認証や認可をしていたら不便。
・ リフレッシュトークンはアクセストークンよりも長い期限(数時間や数日など)。
アクセストークンと一緒に発行。
クライアントはリフレッシュトークンを使えばアクセストークンを再取得できる。
クライアント 認可サーバー
(Keycloak)
1. リフレッシュリクエスト
(w/リフレッシュトークン、クライアント
ID、クライアントシークレット)
3. リフレッシュレスポンス
(w/アクセストークン、リフレッシュ
トークン)
2. クライアント認証と
リフレッシュトークンの検証
トークン
エンドポイント
- 20.
19
© Hitachi, Ltd.2022. All rights reserved.
トークンの無効化
無効化の方法 誰が無効化するか
トークン無効化エンドポイントによる無効化
(RFC7009)
クライアント
アカウント管理コンソールによる無効化 リソースオーナー
管理コンソールによる無効化 管理者ユーザー
・ 有効期限内であっても、アクセストークンやリフレッシュトークンは
無効にすることができる。
(セキュリティ上の理由や、リソースオーナーがAPI連携解除したい場合)
・ Keycloakがサポートする無効化の手段
- 21.
20
© Hitachi, Ltd.2022. All rights reserved.
リソースサーバーでのアクセストークンの扱い
クライアント
(外部アプリケーション)
API呼び出し
(w/アクセストークン)
認可サーバー
(Keycloak)
2. スコープによる認可判断
リソースサーバー
(APIサーバー)
1.トークンの検証
(b) トークンイントロスペクション
1.トークンの検証
(a) ローカルでの検証
どちらか
を実施
3. 業務処理
・ ローカルでの検証(署名のチェックなど)
⇒ 無効化を即座に検知できない
・ トークンイントロスペクション
⇒ 無効化を即座に検知できる
トークンの検証などの共通処理は
APIゲートウェイで代行することもできる
- 22.
21
© Hitachi, Ltd.2022. All rights reserved.
OIDC (OpenID Connect)
OAuth2.0を拡張した「認証」のためのプロトコル。用語が異なったり、追加概念(IDトークン等)がある。
中身はOAuth2.0であるため、API認可にも使うことが可能。
RP
(WebアプリケーションA)
OP
(Keycloak)
6.トークンレスポンス(w/アクセストークン、
リフレッシュトークン、IDトークン)
3. ユーザー認証と同意の取得
認可エンドポイント
4. 認証レスポンス(w/認可コード)
トークンエンドポイント
1. Webアプリケーションにアクセス
5.トークンリクエスト(w/認可コード、
クライアントID・シークレット)
7.IDトークンの検証
リダイレクトURI
2. 認証リクエスト
(w/クライアントID、スコープ:openid必須、
リダイレクトURI)
ブラウザーとOPの間で
セッション確立
8.RPとブラウザーの間で
ログインセッション確立
リソースオーナー
(ブラウザー)
- 23.
© Hitachi, Ltd.2022. All rights reserved.
Contents
22
1. Keycloakとは
2. API認可の基礎
3. Keycloakの基本概念
4. API認可をKeycloakで試す
- 24.
23
© Hitachi, Ltd.2022. All rights reserved.
Keycloakの基本概念
Keycloakの設定を行うためには、特有の用語の理解が必要。
「ユーザー」「クライアント」「セッション」「ロール」「グループ」
「レルム」「クライアントアダプター」「プロトコルマッパー」
「クライアントスコープ」など
今回は、最も基本的な「クライアント」と「セッション」を紹介。
- 25.
24
© Hitachi, Ltd.2022. All rights reserved.
クライアント
• 認証・認可サーバーであるKeycloakのサービスを利用するアプリケーションのこと。
OAuthのクライアント、OIDCのRP、SAMLのSP。
• 管理コンソールの「Clients」画面より作成、管理できる。
- 26.
25
© Hitachi, Ltd.2022. All rights reserved.
セッション
Keycloakではログインが成功するとセッションが生成され、メモリー
上で管理。
アクセストークンやリフレッシュトークンもセッションと関連付けられ
て管理されている。セッションが無効になるとトークンも無効に。
Keycloak
セッション
②発行
セッションID
Cookie
リフレッシュトークン
アクセストークン
セッションID
セッションID
セッションID
①認証されたタイミングで生成、
セッションID採番
③確認
- 27.
© Hitachi, Ltd.2022. All rights reserved.
Contents
26
1. Keycloakとは
2. API認可の基礎
3. Keycloakの基本概念
4. API認可をKeycloakで試す
- 28.
© Hitachi, Ltd.2022. All rights reserved.
4. API認可をKeycloakで試す
27
① 検証環境を構築する
② 検証に必要な設定をする
③ 検証環境を動かしてみよう
④ トークンリフレッシュとトークン無効化を試してみる
⑤ セキュリティを向上する
- 29.
© Hitachi, Ltd.2022. All rights reserved.
4. API認可をKeycloakで試す
28
① 検証環境を構築する
② 検証に必要な設定をする
③ 検証環境を動かしてみよう
④ トークンリフレッシュとトークン無効化を試してみる
⑤ セキュリティを向上する
- 30.
29
© Hitachi, Ltd.2022. All rights reserved.
①検証環境を構築する
• 今回実現するもの → 認可コードフローでアクセストークンを取得しAPIを呼び出すための検証環境
クライアントID・
クライアントシークレット
クライアントID・
クライアントシークレット
クライアントID・
クライアントシークレット
リダイレクトURI
APIコール
サンプルクライアント
(クライアント)
認可リクエスト
Keycloak
(認可サーバー)
ユーザー認証、同意の取得
認可レスポンス
ブラウザー
(リソースオーナー)
API連携指示
認可エンドポイント
トークンリクエスト
トークンレスポンス
トークン
エンドポイント
サンプルAPIサーバー
(リソースサーバー )
リダイレクトURI
イントロスペクションリクエスト
イントロスペクション
エンドポイント イントロスペクションレスポンス
APIレスポンス
- 31.
30
© Hitachi, Ltd.2022. All rights reserved.
①検証環境を構築する
• 今回実現するもの → 認可コードフローでアクセストークンを取得しAPIを呼び出すための検証環境
• https://github.com/keycloak-book-jp から検証環境のソースコードを取得可能
ブラウザー
(リソースオーナー)
サンプルAPIサーバー
(リソースサーバー)
サンプルクライアント
(クライアント)
Keycloak
(認可サーバー)
localhost:8080
localhost:8082
localhost:8081
APIコール (w/アクセストークン)
トークンリクエスト
(w/認可コード、クライアントID、
クライアントシークレット)
API連携指示
ユーザー認証、同意の取得
- 32.
© Hitachi, Ltd.2022. All rights reserved.
4. API認可をKeycloakで試す
31
① 検証環境を構築する
② 検証に必要な設定をする
③ 検証環境を動かしてみよう
④ トークンリフレッシュとトークン無効化を試してみる
⑤ セキュリティを向上する
- 33.
32
© Hitachi, Ltd.2022. All rights reserved.
②検証に必要な設定をする
① レルムの追加
② ユーザーの追加
③ エンドポイント指定
④ クライアント作成・設定
⑤ クライアントID・
クライアントシークレット共有
⑥ エンドポイント指定
⑦ クライアント作成・設定
⑧ クライアントID・
クライアントシークレット共有
⑨ スコープ作成・設定
- 34.
33
© Hitachi, Ltd.2022. All rights reserved.
②検証に必要な設定をする
① レルムの追加
② ユーザーの追加
③ エンドポイント指定
④ クライアント作成・設定
⑤ クライアントID・
クライアントシークレット共有
⑥ エンドポイント指定
⑦ クライアント作成・設定
⑧ クライアントID・
クライアントシークレット共有
⑨ スコープ作成・設定
- 35.
34
© Hitachi, Ltd.2022. All rights reserved.
②検証に必要な設定をする
① レルムの追加
② ユーザーの追加
③ エンドポイント指定
④ クライアント作成・設定
⑤ クライアントID・
クライアントシークレット共有
⑥ エンドポイント指定
⑦ クライアント作成・設定
⑧ クライアントID・
クライアントシークレット共有
⑨ スコープ作成・設定
- 36.
35
© Hitachi, Ltd.2022. All rights reserved.
②検証に必要な設定をする
① レルムの追加
② ユーザーの追加
③ エンドポイント指定
④ クライアント作成・設定
⑤ クライアントID・
クライアントシークレット共有
⑥ エンドポイント指定
⑦ クライアント作成・設定
⑧ クライアントID・
クライアントシークレット共有
⑨ スコープ作成・設定
- 37.
36
© Hitachi, Ltd.2022. All rights reserved.
②検証に必要な設定をする
① レルムの追加
② ユーザーの追加
③ エンドポイント指定
④ クライアント作成・設定
⑤ クライアントID・
クライアントシークレット共有
⑥ エンドポイント指定
⑦ クライアント作成・設定
⑧ クライアントID・
クライアントシークレット共有
⑨ スコープ作成・設定
- 38.
37
© Hitachi, Ltd.2022. All rights reserved.
②検証に必要な設定をする
① レルムの追加
② ユーザーの追加
③ エンドポイント指定
④ クライアント作成・設定
⑤ クライアントID・
クライアントシークレット共有
⑥ エンドポイント指定
⑦ クライアント作成・設定
⑧ クライアントID・
クライアントシークレット共有
⑨ スコープ作成・設定
- 39.
38
© Hitachi, Ltd.2022. All rights reserved.
②検証に必要な設定をする
① レルムの追加
② ユーザーの追加
③ エンドポイント指定
④ クライアント作成・設定
⑤ クライアントID・
クライアントシークレット共有
⑥ エンドポイント指定
⑦ クライアント作成・設定
⑧ クライアントID・
クライアントシークレット共有
⑨ スコープ作成・設定
- 40.
39
© Hitachi, Ltd.2022. All rights reserved.
②検証に必要な設定をする
① レルムの追加
② ユーザーの追加
③ エンドポイント指定
④ クライアント作成・設定
⑤ クライアントID・
クライアントシークレット共有
⑥ エンドポイント指定
⑦ クライアント作成・設定
⑧ クライアントID・
クライアントシークレット共有
⑨ スコープ作成・設定
- 41.
© Hitachi, Ltd.2022. All rights reserved.
4. API認可をKeycloakで試す
40
① 検証環境を構築する
② 検証に必要な設定をする
③ 検証環境を動かしてみよう
④ トークンリフレッシュとトークン無効化を試してみる
⑤ セキュリティを向上する
- 42.
41
© Hitachi, Ltd.2022. All rights reserved.
③検証環境を動かしてみよう
クライアントID・
クライアントシークレット
クライアントID・
クライアントシークレット
クライアントID・
クライアントシークレット
リダイレクトURI
APIコール
サンプルクライアント
(クライアント)
認可リクエスト
Keycloak
(認可サーバー)
ユーザー認証、同意の取得
認可レスポンス
ブラウザー
(リソースオーナー)
API連携指示
認可エンドポイント
トークンリクエスト
トークンレスポンス
トークン
エンドポイント
サンプルAPIサーバー
(リソースサーバー )
リダイレクトURI
イントロスペクションリクエスト
イントロスペクション
エンドポイント イントロスペクションレスポンス
APIレスポンス
localhost:8080
localhost:8081 localhost:8082
- 43.
© Hitachi, Ltd.2022. All rights reserved.
4. API認可をKeycloakで試す
42
① 検証環境を構築する
② 検証に必要な設定をする
③ 検証環境を動かしてみよう
④ トークンリフレッシュとトークン無効化を試してみる
⑤ セキュリティを向上する
- 44.
43
© Hitachi, Ltd.2022. All rights reserved.
④トークンリフレッシュとトークン無効化を試してみる
サンプルクライアント
(クライアント)
Keycloak
(認可サーバー)
リフレッシュリクエスト
リフレッシュレスポンス
トークン
エンドポイント
localhost:8080
localhost:8081
トークンリフレッシュ:
アクセストークンの有効期限が切れたときに、ユーザの再認証無しでアクセストークンを再取得する。
サンプルクライアント
(クライアント)
Keycloak
(認可サーバー)
無効化リクエスト
200 OK
無効化
エンドポイント
localhost:8080
localhost:8081
トークン無効化:
アクセストークンの有効期限が切れる前に、アクセストークンを無効化する。
- 45.
© Hitachi, Ltd.2022. All rights reserved.
4. API認可をKeycloakで試す
44
① 検証環境を構築する
② 検証に必要な設定をする
③ 検証環境を動かしてみよう
④ トークンリフレッシュとトークン無効化を試してみる
⑤ セキュリティを向上する
- 46.
45
© Hitachi, Ltd.2022. All rights reserved.
⑤セキュリティを向上する ~今回はPKCEやります~
サンプルクライアント
(クライアント)
認可リクエスト
Keycloak
(認可サーバー)
ユーザー認証、同意の取得
認可レスポンス
ブラウザー
(リソースオーナー)
API連携指示
認可エンドポイント
トークンリクエスト
トークンレスポンス
トークン
エンドポイント
サンプルAPIサーバー
(リソースサーバー )
リダイレクトURI
PKCEとは:
RFC 7636で定められたProof Key for Code Exchangeの頭文字をとったもの。
認可コード横取り攻撃を軽減する。
①クライアントは、code_verifierというランダム値を生成し、そのハッシュ値(code_challenge)を計算する。
②クライアントは、code_challengeを認可リクエストに付与する。
③クライアントは、code_verifierをトークンリクエストに付与する。
④認可サーバーは、code_verifierとcode_challengeを検証する。
①
②
③
④
- 47.
46
© Hitachi, Ltd.2022. All rights reserved.
おわりに: 参考文献
• 書籍: 認証と認可Keycloak入門
今回の内容の詳細、SSO、様々な認証
(多要素認証、外部ストレージ等)
HA構成やカスタマイズの基本までカバー
https://ric.co.jp/book/new-publication/detail/2081
https://www.amazon.co.jp/dp/4865943226/
• 書籍でカバーできてない内容について
• ThinkIT: KeycloakのFAPI 1.0対応で実現する高度なAPIセキュリティ
https://thinkit.co.jp/series/10313
Financial-grade API (FAPI)や、ベースとなっているClient Policies等を解説
• 公式ドキュメント
https://www.keycloak.org/documentation
日本語訳: https://keycloak-documentation.openstandia.jp/
- 48.
47
© 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.