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

What's hot

Keycloak & midPoint の紹介
Keycloak & midPoint の紹介Keycloak & midPoint の紹介
Keycloak & midPoint の紹介
Hiroyuki Wada
 
OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方
Hitachi, Ltd. OSS Solution Center.
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
Hiroyuki Wada
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
Masaru Kurahayashi
 
OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向Tatsuo Kudo
 
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティKeycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Yuichi Nakamura
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
貴志 上坂
 
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
 
認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜
Masaru Kurahayashi
 
Keycloakの動向
Keycloakの動向Keycloakの動向
Keycloakの動向
Yuichi Nakamura
 
インフラ廻戦 品川事変 前夜編
インフラ廻戦 品川事変 前夜編インフラ廻戦 品川事変 前夜編
インフラ廻戦 品川事変 前夜編
Toru Makabe
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門
Yoichi Kawasaki
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
Tatsuo Kudo
 
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~Tatsuo Kudo
 
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
NTT DATA Technology & Innovation
 
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
Tatsuo Kudo
 
FAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのためにFAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのために
Nat Sakimura
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Atsushi Tanaka
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
Toru Makabe
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
Hitachi, Ltd. OSS Solution Center.
 

What's hot (20)

Keycloak & midPoint の紹介
Keycloak & midPoint の紹介Keycloak & midPoint の紹介
Keycloak & midPoint の紹介
 
OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
 
OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向
 
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティKeycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティ
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
 
認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜
 
Keycloakの動向
Keycloakの動向Keycloakの動向
Keycloakの動向
 
インフラ廻戦 品川事変 前夜編
インフラ廻戦 品川事変 前夜編インフラ廻戦 品川事変 前夜編
インフラ廻戦 品川事変 前夜編
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
 
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
 
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
 
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
 
FAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのためにFAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのために
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
 

Similar to Keycloak開発入門

Access gateway enterprise editon step by step
Access gateway enterprise editon step by stepAccess gateway enterprise editon step by step
Access gateway enterprise editon step by step
Citrix Systems Japan
 
Agile Software Development with Edge Ruby
Agile Software Development with Edge RubyAgile Software Development with Edge Ruby
Agile Software Development with Edge Ruby
Koichi ITO
 
Authentication and Authorization of The Latest Keycloak
Authentication and Authorization of The Latest KeycloakAuthentication and Authorization of The Latest Keycloak
Authentication and Authorization of The Latest Keycloak
Hitachi, Ltd. OSS Solution Center.
 
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
NGINX, Inc.
 
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
 
HTTP関連Lightning Talk
HTTP関連Lightning TalkHTTP関連Lightning Talk
HTTP関連Lightning Talk
Katsumi INOUE
 
Laravelの認証について
Laravelの認証についてLaravelの認証について
Laravelの認証について
Takeo Noda
 
NGINXでの認可について考える
NGINXでの認可について考えるNGINXでの認可について考える
NGINXでの認可について考える
Hitachi, Ltd. OSS Solution Center.
 
JavaからAkkaハンズオン
JavaからAkkaハンズオンJavaからAkkaハンズオン
JavaからAkkaハンズオン
TIS Inc.
 
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1Hideki Saito
 
富士市役所におけるCitrix仮想化ソリューション導入成功のポイント ~ノート型ゼロクライアントとICカードログオンの採用~
富士市役所におけるCitrix仮想化ソリューション導入成功のポイント ~ノート型ゼロクライアントとICカードログオンの採用~富士市役所におけるCitrix仮想化ソリューション導入成功のポイント ~ノート型ゼロクライアントとICカードログオンの採用~
富士市役所におけるCitrix仮想化ソリューション導入成功のポイント ~ノート型ゼロクライアントとICカードログオンの採用~
Yasunobu Fukasawa
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
史識 川原
 
Spring Social でソーシャルログインを実装する
Spring Social でソーシャルログインを実装するSpring Social でソーシャルログインを実装する
Spring Social でソーシャルログインを実装する
Rakuten Group, Inc.
 
Qlik Cloudデータ統合:Data Gateway - Data Movementのセットアップ
Qlik Cloudデータ統合:Data Gateway - Data MovementのセットアップQlik Cloudデータ統合:Data Gateway - Data Movementのセットアップ
Qlik Cloudデータ統合:Data Gateway - Data Movementのセットアップ
QlikPresalesJapan
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
NTT DATA Technology & Innovation
 
TECHTALK 20210126 Qlik Sense SaaSの 認証連携を詳細解説
TECHTALK 20210126 Qlik Sense SaaSの 認証連携を詳細解説TECHTALK 20210126 Qlik Sense SaaSの 認証連携を詳細解説
TECHTALK 20210126 Qlik Sense SaaSの 認証連携を詳細解説
QlikPresalesJapan
 
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化
gree_tech
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
 

Similar to Keycloak開発入門 (20)

Access gateway enterprise editon step by step
Access gateway enterprise editon step by stepAccess gateway enterprise editon step by step
Access gateway enterprise editon step by step
 
Agile Software Development with Edge Ruby
Agile Software Development with Edge RubyAgile Software Development with Edge Ruby
Agile Software Development with Edge Ruby
 
Authentication and Authorization of The Latest Keycloak
Authentication and Authorization of The Latest KeycloakAuthentication and Authorization of The Latest Keycloak
Authentication and Authorization of The Latest Keycloak
 
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
 
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
 
HTTP関連Lightning Talk
HTTP関連Lightning TalkHTTP関連Lightning Talk
HTTP関連Lightning Talk
 
Laravelの認証について
Laravelの認証についてLaravelの認証について
Laravelの認証について
 
NGINXでの認可について考える
NGINXでの認可について考えるNGINXでの認可について考える
NGINXでの認可について考える
 
JavaからAkkaハンズオン
JavaからAkkaハンズオンJavaからAkkaハンズオン
JavaからAkkaハンズオン
 
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
 
Heroku Inside
Heroku InsideHeroku Inside
Heroku Inside
 
富士市役所におけるCitrix仮想化ソリューション導入成功のポイント ~ノート型ゼロクライアントとICカードログオンの採用~
富士市役所におけるCitrix仮想化ソリューション導入成功のポイント ~ノート型ゼロクライアントとICカードログオンの採用~富士市役所におけるCitrix仮想化ソリューション導入成功のポイント ~ノート型ゼロクライアントとICカードログオンの採用~
富士市役所におけるCitrix仮想化ソリューション導入成功のポイント ~ノート型ゼロクライアントとICカードログオンの採用~
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
 
Spring Social でソーシャルログインを実装する
Spring Social でソーシャルログインを実装するSpring Social でソーシャルログインを実装する
Spring Social でソーシャルログインを実装する
 
Qlik Cloudデータ統合:Data Gateway - Data Movementのセットアップ
Qlik Cloudデータ統合:Data Gateway - Data MovementのセットアップQlik Cloudデータ統合:Data Gateway - Data Movementのセットアップ
Qlik Cloudデータ統合:Data Gateway - Data Movementのセットアップ
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
 
TECHTALK 20210126 Qlik Sense SaaSの 認証連携を詳細解説
TECHTALK 20210126 Qlik Sense SaaSの 認証連携を詳細解説TECHTALK 20210126 Qlik Sense SaaSの 認証連携を詳細解説
TECHTALK 20210126 Qlik Sense SaaSの 認証連携を詳細解説
 
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 

More from Yuichi Nakamura

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

More from Yuichi Nakamura (8)

Implementing WebAuthn & FAPI supports on Keycloak
Implementing WebAuthn & FAPI supports on KeycloakImplementing WebAuthn & FAPI supports on Keycloak
Implementing WebAuthn & FAPI supports on Keycloak
 
Keycloakの紹介と最新開発動向
Keycloakの紹介と最新開発動向Keycloakの紹介と最新開発動向
Keycloakの紹介と最新開発動向
 
About secure oss_sig_20190607
About secure oss_sig_20190607About secure oss_sig_20190607
About secure oss_sig_20190607
 
Implementing security requirements for banking API system using Open Source ...
 Implementing security requirements for banking API system using Open Source ... Implementing security requirements for banking API system using Open Source ...
Implementing security requirements for banking API system using Open Source ...
 
OAuthのHolder of Key Token
OAuthのHolder of Key TokenOAuthのHolder of Key Token
OAuthのHolder of Key Token
 
OSSセキュリティ技術の会について
OSSセキュリティ技術の会についてOSSセキュリティ技術の会について
OSSセキュリティ技術の会について
 
Open shiftmeetup 3scalelt_3
Open shiftmeetup 3scalelt_3Open shiftmeetup 3scalelt_3
Open shiftmeetup 3scalelt_3
 
OSSセキュリティ技術の会について
OSSセキュリティ技術の会について OSSセキュリティ技術の会について
OSSセキュリティ技術の会について
 

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 ならびにその子会社の登録商標です。 • その他記載の会社名、製品名などは、それぞれの会社の商標もしくは登録商標です