SlideShare a Scribd company logo
© Hitachi, Ltd. 2018. All rights reserved.
Keycloakパッチ開発事例紹介
株式会社 日立製作所
茂木 昂士
2018/07/13
© Hitachi, Ltd. 2018. All rights reserved.
1. 何を実装したか
2. 開発の準備
3. 実装
Contents
1
4. コードレビュー
5. まとめ
© Hitachi, Ltd. 2018. All rights reserved.
1. 何を実装したか?
2
© Hitachi, Ltd. 2018. All rights reserved.
Contributeしたきっかけ
3
• 認証の画面も含めて独自のものにしたかった
– ロジックが入るため、Theme機能では足りない
– OpenID Connectで規定されていない独自パラメータも利用したい
• Keycloakをカスタマイズして対応
– SPIという仕組みがありカスタマイズは可能
– Identity BrokerのSPIを利用して要求を実現
• カスタマイズしたもののアップデートが必要
– コミュニティに管理してもらおう!
© Hitachi, Ltd. 2018. All rights reserved.
Identity Brokering
4
• 認証を外部のIdPに委譲する機能
– 認証して得られた結果(ID Token)をKeycloakのユーザとして扱う
• 追加した機能
– 認証時に独自のパラメータが転送されるようにした
外部IdPに認証してもらう
認証済みユーザ情報を
Keycloakのユーザとして扱う
Keycloakで認証
Keycloakでユーザ管理
© Hitachi, Ltd. 2018. All rights reserved.
Flow
5
クライアントから送信された
パラメータが転送されない
© Hitachi, Ltd. 2018. All rights reserved.
2. 開発の準備
6
© Hitachi, Ltd. 2018. All rights reserved.
前準備
7
• 詳細は「Hacking on Keycloak」を
• 下記のコミュニケーションツールがある
– GitHub
– JIRA (JBoss Developer)
– メーリングリスト
• JIRAでチケット作成 -> 新規 Pull Request
© Hitachi, Ltd. 2018. All rights reserved.
ソース取得・ビルド
8
• ForkしてClone
– git clone https://github.com/<your_name>/keycloak
• Mavenでビルド
– mvn install –DskipTests=true
– cd distribution
– mvn install
• distribution/targets以下に出力される
• テストはよく失敗するのでとりあえず飛ばす
– ごめんなさい…
© Hitachi, Ltd. 2018. All rights reserved.
IDE(Eclipse)での開発
9
• Mavenプロジェクトをインポート
– Test, Example含め300以上のプロジェクトがある
– 最初のインポートは時間がかかる
– プロジェクトは階層表示を推奨
• Code FormatはWildflyのものを利用
– https://developer.jboss.org/wiki/ImportFormattingRules
– すべてのコードに適用されているかは…
© Hitachi, Ltd. 2018. All rights reserved.
IDEでのデバッグ
10
• 公式には下記コマンドでサーバを起動している
– mvn -f testsuite/utils/pom.xml exec:java -Pkeycloak-server
(From README.md)
• せっかくなのでIDEでデバッグ
– 上記pom.xmlを見ると、下記のクラスを実行している
– Project: keycloak-testsuite-utils
– Main : org.keycloak.testsuite.KeycloakServer
Break Pointなども使えるように!
© Hitachi, Ltd. 2018. All rights reserved.
3. 実装
11
© Hitachi, Ltd. 2018. All rights reserved.
Walkthrough
12
• 関係するクラスを探っていく
– 基本的な機能はkeycloak-servicesにある
セッション作成
パラメータ保存
外部IdPへ保存した
パラメータ転送
ブラウザ Keycloak 外部IdP
© Hitachi, Ltd. 2018. All rights reserved.
AuthorizationEndpoint
13
• Keycloakログイン画面の表示
– QueryParameterのパース、チェックなど
– Sessionの作成、保存
• AuthorizationSessionというInfinispanモデルを作成
• QueryParameterなどもこれに保管されている
• 独自パラメータもすでに保管されている
– ClientNotesというMapにパラメータが入っている
– Standardなパラメータと区別するためPrefixつき
© Hitachi, Ltd. 2018. All rights reserved.
IdentityBrokerService
14
• 登録されているIdPを選択、Provider実行
– “/{provider_id}/login”というパス定義
– 外部IdPへのリダイレクトをキック
ここのリンク先になる
© Hitachi, Ltd. 2018. All rights reserved.
OidcIdentityProvider
15
• SPI(keycloak-spi-private)を実装している
– Provider, ProviderFactory, ProviderConfigの組み合わせ
• 今回はAbstractOauth2IdentityProviderを変更
– OidcIdentityProviderの親クラス
– createAuthorizationUrlメソッドでRedirect先を生成
© Hitachi, Ltd. 2018. All rights reserved.
設定項目の追加(1/2)
16
• 設定項目の追加が必要
– 特定のパラメータだけ転送するようにするため
– 設定項目保存のための修正が必要
• Identity Brokeringの設定項目はDBに入っている
DBスキーマの変更面倒そうだなぁ…
© Hitachi, Ltd. 2018. All rights reserved.
設定項目の追加(2/2)
17
MariaDB [rhsso]> select * from IDENTITY_PROVIDER_CONFIG;
+--------------------------------------+----------------------------------+----------------------+
| IDENTITY_PROVIDER_ID | VALUE | NAME |
+--------------------------------------+----------------------------------+----------------------+
| edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak.../auth | authorizationUrl |
| edcd71e3-2210-401c-afb8-d36f479e8493 | | backchannelSupported |
| edcd71e3-2210-401c-afb8-d36f479e8493 | keycloak | clientId |
| edcd71e3-2210-401c-afb8-d36f479e8493 | 0882f656 | clientSecret |
| edcd71e3-2210-401c-afb8-d36f479e8493 | | disableUserInfo |
| edcd71e3-2210-401c-afb8-d36f479e8493 | | hideOnLoginPage |
| edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak... | issuer |
| edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak.../certs | jwksUrl |
| edcd71e3-2210-401c-afb8-d36f479e8493 | | loginHint |
| edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak.../logout | logoutUrl |
| edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak.../token | tokenUrl |
| edcd71e3-2210-401c-afb8-d36f479e8493 | true | useJwksUrl |
| edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak.../userinfo | userInfoUrl |
| edcd71e3-2210-401c-afb8-d36f479e8493 | true | validateSignature |
+--------------------------------------+----------------------------------+----------------------+
14 rows in set (0.00 sec)
• 設定項目はKey-Valueペアで保存されていた
– よく変更されるので合理的
必要な場合は keycloak-model-jpaというプロジェクトにまとまっている
© Hitachi, Ltd. 2018. All rights reserved.
GUIの変更
18
• keycloak-theme
– AngularJS(1.6.x)で作られている
– Formの追加だけでOKだった
– ラベル等はangular-translate
• keyclaok-previewというフォルダがあった
– Angular 5.x で作り直しているみたい
– レスポンシブ対応などのPull Requestを目にしている
© Hitachi, Ltd. 2018. All rights reserved.
テストコード(Integration)
19
• Arquillianというフレームワークを使っている
– JavaEEアプリケーションのテストを自動化してくれる
• テストの実行
– ブラウザを使うテストも実行可能(Selenium, PhantomJS etc.)
– mvn -f testsuite/integration-arquillian/tests/base/pom.xml test
– 正規表現等で実行するテストを指定できる
• -Dtest=“org.keycloak.testsuite.broker.Kc*” など
– 詳細は HOW-TO-RUN.md に
© Hitachi, Ltd. 2018. All rights reserved.
Identity Brokeringのテスト
20
• 外部IdPとの連携テストをどうやるか?
– KeycloakのRealmを2つ用意してやる
– ProviderとConsumerの設定をKeycloakに設定
• org.keycloak.testsuite.broker.KcOidcBrokerConfiguration
• パラメータの転送テスト
– すでにあるテスト(arc_values, promptの指定)を参考に記載
– あまり理解しないでも書けてしまった…
© Hitachi, Ltd. 2018. All rights reserved.
4. コードレビュー
21
© Hitachi, Ltd. 2018. All rights reserved.
GithubへPush
22
• コードをPushすると、TravisCIでテストが実行される
– 全テストが終わるのに20分くらいかかる
– すべてパスすれば、レビューしてもらえる
• Unit Testはあまり必要ない
– 「IntegrationとUnitで内容が重複するとメンテコストが上がる」
– Integration Testがしっかりしているので問題ない
• 最後にコミットをまとめる
– 1Pull Request に 1commitというポリシー
– git rebase -i, git push –f
© Hitachi, Ltd. 2018. All rights reserved.
5. まとめ
23
© Hitachi, Ltd. 2018. All rights reserved.
まとめ
24
• やりたいことを正しく伝える
– 理解してもらえないと的外れな指摘
– 「よしなに」はやってくれない
– Test Caseも伝えるための手段
• Time Zoneの違い
– 日本と時差のある国(ex: ヨーロッパ諸国)
– こっちの17時過ぎくらいから仕事が始まる
© Hitachi, Ltd. 2018. All rights reserved.
株式会社 日立製作所
Keycloakパッチ投稿事例紹介
2018/07/13
茂木 昂士
END
25
© Hitachi, Ltd. 2018. All rights reserved.
他社所有商標に関する表示
26
• Hitachiは株式会社 日立製作所の商標または登録商標です
• JBoss は米国 RedHat Inc ならびにその子会社の登録商標です。
• その他記載の会社名、製品名などは、それぞれの会社の商標もしくは登録商標です
Keycloak開発入門

More Related Content

PDF
Keycloakの最近のトピック
Hitachi, Ltd. OSS Solution Center.
 
PPTX
Keycloak入門
Hiroyuki Wada
 
PDF
Keycloak拡張入門
Hiroyuki Wada
 
PPTX
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
 
PPTX
Keycloakのステップアップ認証について
Hitachi, Ltd. OSS Solution Center.
 
PPTX
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
Hitachi, Ltd. OSS Solution Center.
 
PDF
ハイブリッド時代のID基盤構成の基礎
Naohiro Fujie
 
PDF
認証の課題とID連携の実装 〜ハンズオン〜
Masaru Kurahayashi
 
Keycloakの最近のトピック
Hitachi, Ltd. OSS Solution Center.
 
Keycloak入門
Hiroyuki Wada
 
Keycloak拡張入門
Hiroyuki Wada
 
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
 
Keycloakのステップアップ認証について
Hitachi, Ltd. OSS Solution Center.
 
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
Hitachi, Ltd. OSS Solution Center.
 
ハイブリッド時代のID基盤構成の基礎
Naohiro Fujie
 
認証の課題とID連携の実装 〜ハンズオン〜
Masaru Kurahayashi
 

What's hot (20)

PDF
なぜOpenID Connectが必要となったのか、その歴史的背景
Tatsuo Kudo
 
PDF
KeycloakのDevice Flow、CIBAについて
Hiroyuki Wada
 
PDF
ID管理/認証システム導入の理想と現実
Naohiro Fujie
 
PDF
Keycloak & midPoint の紹介
Hiroyuki Wada
 
PDF
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
Masaru Kurahayashi
 
PPTX
Keycloakの実際・翻訳プロジェクト紹介
Hiroyuki Wada
 
PPTX
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
NTT DATA Technology & Innovation
 
PDF
Kongの概要と導入事例
briscola-tokyo
 
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
貴志 上坂
 
PPTX
KeycloakでAPI認可に入門する
Hitachi, Ltd. OSS Solution Center.
 
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
 
PDF
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
 
PDF
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
Tatsuo Kudo
 
PDF
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
Tatsuo Kudo
 
PPTX
IDaaS を利用すべき理由とエンジニアがおさえておくべきポイント (2021年1月14日)
Masanori KAMAYAMA
 
PDF
VPN・証明書はもう不要? Azure ADによるデバイス認証 at Tech Summit 2018
Shinichiro Kosugi
 
PDF
新しい認証技術FIDOの最新動向
FIDO Alliance
 
PDF
Azure AD B2CにIdPを色々と繋いでみる
Naohiro Fujie
 
PPTX
Azure API Management 俺的マニュアル
貴志 上坂
 
PDF
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 
なぜOpenID Connectが必要となったのか、その歴史的背景
Tatsuo Kudo
 
KeycloakのDevice Flow、CIBAについて
Hiroyuki Wada
 
ID管理/認証システム導入の理想と現実
Naohiro Fujie
 
Keycloak & midPoint の紹介
Hiroyuki Wada
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
Masaru Kurahayashi
 
Keycloakの実際・翻訳プロジェクト紹介
Hiroyuki Wada
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
NTT DATA Technology & Innovation
 
Kongの概要と導入事例
briscola-tokyo
 
Azure Api Management 俺的マニュアル 2020年3月版
貴志 上坂
 
KeycloakでAPI認可に入門する
Hitachi, Ltd. OSS Solution Center.
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
 
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
Tatsuo Kudo
 
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
Tatsuo Kudo
 
IDaaS を利用すべき理由とエンジニアがおさえておくべきポイント (2021年1月14日)
Masanori KAMAYAMA
 
VPN・証明書はもう不要? Azure ADによるデバイス認証 at Tech Summit 2018
Shinichiro Kosugi
 
新しい認証技術FIDOの最新動向
FIDO Alliance
 
Azure AD B2CにIdPを色々と繋いでみる
Naohiro Fujie
 
Azure API Management 俺的マニュアル
貴志 上坂
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 
Ad

Similar to Keycloak開発入門 (20)

PPTX
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
 
PDF
Access gateway enterprise editon step by step
Citrix Systems Japan
 
PDF
Agile Software Development with Edge Ruby
Koichi ITO
 
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
 
PDF
Authentication and Authorization of The Latest Keycloak
Hitachi, Ltd. OSS Solution Center.
 
PPTX
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
NGINX, Inc.
 
PPTX
Qlik Talend Cloudしっかり学ぶ勉強会 #09 AzureSynapseAnakyticsのターゲット接続
QlikPresalesJapan
 
PPTX
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
 
PDF
HTTP関連Lightning Talk
Katsumi INOUE
 
PDF
Laravelの認証について
Takeo Noda
 
PPTX
NGINXでの認可について考える
Hitachi, Ltd. OSS Solution Center.
 
PDF
JavaからAkkaハンズオン
TIS Inc.
 
PDF
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
Hideki Saito
 
PDF
Heroku Inside
Ayumu Aizawa
 
PDF
富士市役所におけるCitrix仮想化ソリューション導入成功のポイント ~ノート型ゼロクライアントとICカードログオンの採用~
Yasunobu Fukasawa
 
PDF
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
史識 川原
 
PDF
Spring Social でソーシャルログインを実装する
Rakuten Group, Inc.
 
PPTX
Qlik Cloudデータ統合:Data Gateway - Data Movementのセットアップ
QlikPresalesJapan
 
PPTX
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
NTT DATA Technology & Innovation
 
PPTX
TECHTALK 20210126 Qlik Sense SaaSの 認証連携を詳細解説
QlikPresalesJapan
 
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
 
Access gateway enterprise editon step by step
Citrix Systems Japan
 
Agile Software Development with Edge Ruby
Koichi ITO
 
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
 
Authentication and Authorization of The Latest Keycloak
Hitachi, Ltd. OSS Solution Center.
 
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
NGINX, Inc.
 
Qlik Talend Cloudしっかり学ぶ勉強会 #09 AzureSynapseAnakyticsのターゲット接続
QlikPresalesJapan
 
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
 
HTTP関連Lightning Talk
Katsumi INOUE
 
Laravelの認証について
Takeo Noda
 
NGINXでの認可について考える
Hitachi, Ltd. OSS Solution Center.
 
JavaからAkkaハンズオン
TIS Inc.
 
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
Hideki Saito
 
Heroku Inside
Ayumu Aizawa
 
富士市役所におけるCitrix仮想化ソリューション導入成功のポイント ~ノート型ゼロクライアントとICカードログオンの採用~
Yasunobu Fukasawa
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
史識 川原
 
Spring Social でソーシャルログインを実装する
Rakuten Group, Inc.
 
Qlik Cloudデータ統合:Data Gateway - Data Movementのセットアップ
QlikPresalesJapan
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
NTT DATA Technology & Innovation
 
TECHTALK 20210126 Qlik Sense SaaSの 認証連携を詳細解説
QlikPresalesJapan
 
Ad

More from Yuichi Nakamura (10)

PDF
Implementing WebAuthn & FAPI supports on Keycloak
Yuichi Nakamura
 
PPTX
Keycloakの紹介と最新開発動向
Yuichi Nakamura
 
PPTX
About secure oss_sig_20190607
Yuichi Nakamura
 
PDF
Implementing security requirements for banking API system using Open Source ...
Yuichi Nakamura
 
PDF
OAuthのHolder of Key Token
Yuichi Nakamura
 
PDF
OSSセキュリティ技術の会について
Yuichi Nakamura
 
PDF
Open shiftmeetup 3scalelt_3
Yuichi Nakamura
 
PDF
Keycloakの動向
Yuichi Nakamura
 
PPTX
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Yuichi Nakamura
 
PPTX
OSSセキュリティ技術の会について
Yuichi Nakamura
 
Implementing WebAuthn & FAPI supports on Keycloak
Yuichi Nakamura
 
Keycloakの紹介と最新開発動向
Yuichi Nakamura
 
About secure oss_sig_20190607
Yuichi Nakamura
 
Implementing security requirements for banking API system using Open Source ...
Yuichi Nakamura
 
OAuthのHolder of Key Token
Yuichi Nakamura
 
OSSセキュリティ技術の会について
Yuichi Nakamura
 
Open shiftmeetup 3scalelt_3
Yuichi Nakamura
 
Keycloakの動向
Yuichi Nakamura
 
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Yuichi Nakamura
 
OSSセキュリティ技術の会について
Yuichi Nakamura
 

Keycloak開発入門

  • 1. © Hitachi, Ltd. 2018. All rights reserved. Keycloakパッチ開発事例紹介 株式会社 日立製作所 茂木 昂士 2018/07/13
  • 2. © Hitachi, Ltd. 2018. All rights reserved. 1. 何を実装したか 2. 開発の準備 3. 実装 Contents 1 4. コードレビュー 5. まとめ
  • 3. © Hitachi, Ltd. 2018. All rights reserved. 1. 何を実装したか? 2
  • 4. © Hitachi, Ltd. 2018. All rights reserved. Contributeしたきっかけ 3 • 認証の画面も含めて独自のものにしたかった – ロジックが入るため、Theme機能では足りない – OpenID Connectで規定されていない独自パラメータも利用したい • Keycloakをカスタマイズして対応 – SPIという仕組みがありカスタマイズは可能 – Identity BrokerのSPIを利用して要求を実現 • カスタマイズしたもののアップデートが必要 – コミュニティに管理してもらおう!
  • 5. © Hitachi, Ltd. 2018. All rights reserved. Identity Brokering 4 • 認証を外部のIdPに委譲する機能 – 認証して得られた結果(ID Token)をKeycloakのユーザとして扱う • 追加した機能 – 認証時に独自のパラメータが転送されるようにした 外部IdPに認証してもらう 認証済みユーザ情報を Keycloakのユーザとして扱う Keycloakで認証 Keycloakでユーザ管理
  • 6. © Hitachi, Ltd. 2018. All rights reserved. Flow 5 クライアントから送信された パラメータが転送されない
  • 7. © Hitachi, Ltd. 2018. All rights reserved. 2. 開発の準備 6
  • 8. © Hitachi, Ltd. 2018. All rights reserved. 前準備 7 • 詳細は「Hacking on Keycloak」を • 下記のコミュニケーションツールがある – GitHub – JIRA (JBoss Developer) – メーリングリスト • JIRAでチケット作成 -> 新規 Pull Request
  • 9. © Hitachi, Ltd. 2018. All rights reserved. ソース取得・ビルド 8 • ForkしてClone – git clone https://github.com/<your_name>/keycloak • Mavenでビルド – mvn install –DskipTests=true – cd distribution – mvn install • distribution/targets以下に出力される • テストはよく失敗するのでとりあえず飛ばす – ごめんなさい…
  • 10. © Hitachi, Ltd. 2018. All rights reserved. IDE(Eclipse)での開発 9 • Mavenプロジェクトをインポート – Test, Example含め300以上のプロジェクトがある – 最初のインポートは時間がかかる – プロジェクトは階層表示を推奨 • Code FormatはWildflyのものを利用 – https://developer.jboss.org/wiki/ImportFormattingRules – すべてのコードに適用されているかは…
  • 11. © Hitachi, Ltd. 2018. All rights reserved. IDEでのデバッグ 10 • 公式には下記コマンドでサーバを起動している – mvn -f testsuite/utils/pom.xml exec:java -Pkeycloak-server (From README.md) • せっかくなのでIDEでデバッグ – 上記pom.xmlを見ると、下記のクラスを実行している – Project: keycloak-testsuite-utils – Main : org.keycloak.testsuite.KeycloakServer Break Pointなども使えるように!
  • 12. © Hitachi, Ltd. 2018. All rights reserved. 3. 実装 11
  • 13. © Hitachi, Ltd. 2018. All rights reserved. Walkthrough 12 • 関係するクラスを探っていく – 基本的な機能はkeycloak-servicesにある セッション作成 パラメータ保存 外部IdPへ保存した パラメータ転送 ブラウザ Keycloak 外部IdP
  • 14. © Hitachi, Ltd. 2018. All rights reserved. AuthorizationEndpoint 13 • Keycloakログイン画面の表示 – QueryParameterのパース、チェックなど – Sessionの作成、保存 • AuthorizationSessionというInfinispanモデルを作成 • QueryParameterなどもこれに保管されている • 独自パラメータもすでに保管されている – ClientNotesというMapにパラメータが入っている – Standardなパラメータと区別するためPrefixつき
  • 15. © Hitachi, Ltd. 2018. All rights reserved. IdentityBrokerService 14 • 登録されているIdPを選択、Provider実行 – “/{provider_id}/login”というパス定義 – 外部IdPへのリダイレクトをキック ここのリンク先になる
  • 16. © Hitachi, Ltd. 2018. All rights reserved. OidcIdentityProvider 15 • SPI(keycloak-spi-private)を実装している – Provider, ProviderFactory, ProviderConfigの組み合わせ • 今回はAbstractOauth2IdentityProviderを変更 – OidcIdentityProviderの親クラス – createAuthorizationUrlメソッドでRedirect先を生成
  • 17. © Hitachi, Ltd. 2018. All rights reserved. 設定項目の追加(1/2) 16 • 設定項目の追加が必要 – 特定のパラメータだけ転送するようにするため – 設定項目保存のための修正が必要 • Identity Brokeringの設定項目はDBに入っている DBスキーマの変更面倒そうだなぁ…
  • 18. © Hitachi, Ltd. 2018. All rights reserved. 設定項目の追加(2/2) 17 MariaDB [rhsso]> select * from IDENTITY_PROVIDER_CONFIG; +--------------------------------------+----------------------------------+----------------------+ | IDENTITY_PROVIDER_ID | VALUE | NAME | +--------------------------------------+----------------------------------+----------------------+ | edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak.../auth | authorizationUrl | | edcd71e3-2210-401c-afb8-d36f479e8493 | | backchannelSupported | | edcd71e3-2210-401c-afb8-d36f479e8493 | keycloak | clientId | | edcd71e3-2210-401c-afb8-d36f479e8493 | 0882f656 | clientSecret | | edcd71e3-2210-401c-afb8-d36f479e8493 | | disableUserInfo | | edcd71e3-2210-401c-afb8-d36f479e8493 | | hideOnLoginPage | | edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak... | issuer | | edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak.../certs | jwksUrl | | edcd71e3-2210-401c-afb8-d36f479e8493 | | loginHint | | edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak.../logout | logoutUrl | | edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak.../token | tokenUrl | | edcd71e3-2210-401c-afb8-d36f479e8493 | true | useJwksUrl | | edcd71e3-2210-401c-afb8-d36f479e8493 | http://keycloak.../userinfo | userInfoUrl | | edcd71e3-2210-401c-afb8-d36f479e8493 | true | validateSignature | +--------------------------------------+----------------------------------+----------------------+ 14 rows in set (0.00 sec) • 設定項目はKey-Valueペアで保存されていた – よく変更されるので合理的 必要な場合は keycloak-model-jpaというプロジェクトにまとまっている
  • 19. © Hitachi, Ltd. 2018. All rights reserved. GUIの変更 18 • keycloak-theme – AngularJS(1.6.x)で作られている – Formの追加だけでOKだった – ラベル等はangular-translate • keyclaok-previewというフォルダがあった – Angular 5.x で作り直しているみたい – レスポンシブ対応などのPull Requestを目にしている
  • 20. © Hitachi, Ltd. 2018. All rights reserved. テストコード(Integration) 19 • Arquillianというフレームワークを使っている – JavaEEアプリケーションのテストを自動化してくれる • テストの実行 – ブラウザを使うテストも実行可能(Selenium, PhantomJS etc.) – mvn -f testsuite/integration-arquillian/tests/base/pom.xml test – 正規表現等で実行するテストを指定できる • -Dtest=“org.keycloak.testsuite.broker.Kc*” など – 詳細は HOW-TO-RUN.md に
  • 21. © Hitachi, Ltd. 2018. All rights reserved. Identity Brokeringのテスト 20 • 外部IdPとの連携テストをどうやるか? – KeycloakのRealmを2つ用意してやる – ProviderとConsumerの設定をKeycloakに設定 • org.keycloak.testsuite.broker.KcOidcBrokerConfiguration • パラメータの転送テスト – すでにあるテスト(arc_values, promptの指定)を参考に記載 – あまり理解しないでも書けてしまった…
  • 22. © Hitachi, Ltd. 2018. All rights reserved. 4. コードレビュー 21
  • 23. © Hitachi, Ltd. 2018. All rights reserved. GithubへPush 22 • コードをPushすると、TravisCIでテストが実行される – 全テストが終わるのに20分くらいかかる – すべてパスすれば、レビューしてもらえる • Unit Testはあまり必要ない – 「IntegrationとUnitで内容が重複するとメンテコストが上がる」 – Integration Testがしっかりしているので問題ない • 最後にコミットをまとめる – 1Pull Request に 1commitというポリシー – git rebase -i, git push –f
  • 24. © Hitachi, Ltd. 2018. All rights reserved. 5. まとめ 23
  • 25. © Hitachi, Ltd. 2018. All rights reserved. まとめ 24 • やりたいことを正しく伝える – 理解してもらえないと的外れな指摘 – 「よしなに」はやってくれない – Test Caseも伝えるための手段 • Time Zoneの違い – 日本と時差のある国(ex: ヨーロッパ諸国) – こっちの17時過ぎくらいから仕事が始まる
  • 26. © Hitachi, Ltd. 2018. All rights reserved. 株式会社 日立製作所 Keycloakパッチ投稿事例紹介 2018/07/13 茂木 昂士 END 25
  • 27. © Hitachi, Ltd. 2018. All rights reserved. 他社所有商標に関する表示 26 • Hitachiは株式会社 日立製作所の商標または登録商標です • JBoss は米国 RedHat Inc ならびにその子会社の登録商標です。 • その他記載の会社名、製品名などは、それぞれの会社の商標もしくは登録商標です