SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
© 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開発入門

Contenu connexe

Tendances

SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 

Tendances (20)

KeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開するKeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
 
Keycloakの動向
Keycloakの動向Keycloakの動向
Keycloakの動向
 
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
 
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
 
Keycloakの紹介と最新開発動向
Keycloakの紹介と最新開発動向Keycloakの紹介と最新開発動向
Keycloakの紹介と最新開発動向
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
 
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
 
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_insideAuthlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
 
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
IDaaS を利用すべき理由とエンジニアがおさえておくべきポイント (2021年1月14日)
IDaaS を利用すべき理由とエンジニアがおさえておくべきポイント (2021年1月14日)IDaaS を利用すべき理由とエンジニアがおさえておくべきポイント (2021年1月14日)
IDaaS を利用すべき理由とエンジニアがおさえておくべきポイント (2021年1月14日)
 

Similaire à Keycloak開発入門

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
 
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
Hideki Saito
 

Similaire à Keycloak開発入門 (20)

Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
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
 
Agile Software Development with Edge Ruby
Agile Software Development with Edge RubyAgile Software Development with Edge Ruby
Agile Software Development with Edge Ruby
 
講演資料: コスト最適なプライベート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アンカンファレンス@オンライン 発表資料)
 
長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 

Plus de 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
 
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
 
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティKeycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティ
 
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 ならびにその子会社の登録商標です。 • その他記載の会社名、製品名などは、それぞれの会社の商標もしくは登録商標です