Contenu connexe
Similaire à Keycloakの紹介と最新開発動向 (20)
Plus de Yuichi Nakamura (8)
Keycloakの紹介と最新開発動向
- 1. © Hitachi, Ltd. 2019. All rights reserved.
株式会社 日立製作所
中村 雄一
2019/06/07
Keycloakの紹介と最新開発動向
OSSセキュリティ技術の会第5回勉強会
- 2. © Hitachi, Ltd. 2019. All rights reserved.
1. Keycloakの概要
2. APIにおけるKeycloak
3. 開発動向
Contents
1
- 4. © Hitachi, Ltd. 2019. All rights reserved.
Keycloakとは
3
Red Hatを中心とするコミュニティで開発される
ID情報を取り扱うOSSです。
LDAP
Active
Directory
RDB
主要標準に対応したID連携
(Identity Federation)
ソーシャルログイン
(Identity Brokering)
ID管理と認証
(Identity Management)
- 5. © Hitachi, Ltd. 2019. All rights reserved.
ユースケース1: シングルサインオン
Webアプリ
ユーザ認証
エージェント型
Webサイトアクセス
認証情報連携
OIDC/SAML
ライブラリ
Webアプリ
ユーザ認証
Webサイトアクセス
認証情報連携
Reverse Proxy
(Apache mod_openidc)
Webサイトアクセス
(ユーザ属性付)
Proxy型
Webアプリ側では、
ライブラリを使ってOpenID Connect/SAMLで
Keycloakと連携する処理を作り込む
Keycloakからは「クライアントアダプタ」を提供。
DBもしくは、LDAP・AD等と
連携して認証し認証結果を
Webアプリに送付
Webアプリ側での作り込み
は最小限
最近Keycloak用リバプロの
「Gatekeeper」がKeycloak
コミュニティよりリリース
- 6. © Hitachi, Ltd. 2019. All rights reserved.
ユースケース2: ソーシャルログイン
5
Webアプリ
ユーザ認証
エージェント型での例
Webサイトアクセス
認証情報連携
OIDC/SAML
ライブラリ
外部サイト
KeycloakがOpenID Connectを
利用して、外部サイトの
認証画面にフォワード
認証結果
Proxy型でも同様にソーシャルログインに対応可
- 8. © Hitachi, Ltd. 2019. All rights reserved.
APIセキュリティの基本: 認証とアクセス制御
7
ユーザは誰?
⇒ユーザ認証
APIを使うアプリは誰?
⇒ クライアント認証
エンド
ユーザ
APIを利用する
アプリ
APIサーバ
誰が何をしていいの?
⇒アクセス制御
ブラウザやスマホ
でアプリ利用
REST APIコール
認証方式 対応する認証
APIキー クライアント認証
OAuth/OpenID Connect クライアント認証+ユーザ認証
クライアント認証単独
「認証」が大前提
Keycloak
- 9. © Hitachi, Ltd. 2019. All rights reserved.
APIキー認証
8
問題点:
・ 標準化されていない
・ エンドユーザを認証できない
近年のオープンAPIではOAuth/OpenID Connectが主流
->API分野でKeycloakが注目
- 10. © Hitachi, Ltd. 2019. All rights reserved.
OAuth2 と OpenID Connect
9
・ KeycloakはOAuth/OpenID Connect両方に対応した認可サーバ
アクセストークンを発行・管理
「アクセストークン」を発行してもらうためのプロトコル。「認可サーバ」が必要。
ユーザは誰?
⇒ユーザ認証
APIを使うアプリは誰?
⇒ クライアント認証
エンド
ユーザ
APIを利用する
アプリ
APIサーバ
誰が何をしていいの?
⇒アクセス制御
ブラウザやスマホ
でアプリ利用
REST APIコール
アクセストークン アクセストークンを
使って判断
認可
サーバ
・ OAuth2:
- 基本的なプロトコル。自由度が高すぎセキュリティホールを作り込みやすい欠点
・ OpenID Connect :
- OAuthの上に認証情報(IDトークン)連携を追加
- OAuthもハードニングされている
- 11. © Hitachi, Ltd. 2019. All rights reserved.
アクセストークンの例
10
{
"jti": "c26a32c4-4b48-4c2f-a7da-3b9b8ecad652",
"exp": 1535424101,
"nbf": 0,
"iat": 1535423801,
"iss": "http://localhost:8080/auth/realms/provider",
"aud": "broker",
"sub": "e4b11e2e-9136-409b-8720-57463c627c10",
"typ": "Bearer",
"azp": "broker",
"auth_time": 0,
"session_state": "ac1767e2-2e30-4d44-b6f3-b77935a7a0bc",
"acr": "1",
"allowed-origins": [],
"realm_access": {
"roles": [
"read",
"additional",
"write"
]
},
"name": "Takashi Mogi",
"preferred_username": "mogi",
"given_name": "Takashi",
"family_name": "Mogi",
"email": "mogi@example.com"
}
アクセストークンの中身は任意
(認可サーバのソフトウェアによって異なる)
Keycloakから発行されたアクセストークンの例:
Keycloakでは、
ロールやユーザ名のような属性情報が
アクセストークンに入っている
(Keycloak独自仕様)
APIサーバはこれらを見てアクセス制御できる。
- 12. © Hitachi, Ltd. 2019. All rights reserved. 11
エンドユーザ
APIサーバ
サードパーティー
アプリケーション
LDAP
DBMS
1. ログイン画面リダイレクト
6.アクセストークン
発行
(OpenID Connectの
場合は+IDトークン)
7.アクセストークン付き
APIアクセス
Keycloakサーバ
OAuth/OpenID Connectによるトークン発行フローの例
2. LDAPやDBと
連携してユーザ認証
3. 認可コード返却
4.トークンリクエスト
+クライアント秘密情報
API提供者側の認証情報を持たないため
OpenID Connectが急速に普及している。
5. クライアント
認証
API提供者Authorization Code Grant
- 13. © Hitachi, Ltd. 2019. All rights reserved.
Token Introspection
12
Token Introspectionにて聞きに行く
APIサーバ
サードパーティー
アプリケーション
トークン付きAPIアクセス
Keycloakサーバ
・ トークンが有効か無効かは、認可サーバが管理
認可サーバからプッシュ通知される仕掛けはなく、
認可サーバ側に聞きにいかないとわからない
・ トークンの有効性やメタデータを聞くためのI/FがRFC7662にて規定:
Token Introspection ⇒ Keycloakも対応
・ 万全を期する場合は、APIサーバが毎度アクセスがあるごとに聞きにいく
必要があることに注意。
- 14. © Hitachi, Ltd. 2019. All rights reserved.
アクセス制御処理
13
APIサーバ
サードパーティー
アプリケーション
1) トークン付きAPIアクセス
Keycloakサーバ
2) トークン正当性・有効性確認
(Token Introspection)
3) トークンデコード
署名確認
4)トークン中の属性を
見て
アクセス可否判断
5) APIの結果
アクセス制御処理
・ Keycloak自身はアクセス制御にはほとんど関与しない
・ APIサーバでアクセス制御を行う必要。
⇒ API数が増えると実装が煩雑な場合もある
リバプロ(APIゲートウェイ)を置くこともある
- 15. © Hitachi, Ltd. 2019. All rights reserved.
Keycloakの入手
14
Keycloakのダウンロードページから
ZIPファイルをダウンロード
- 16. © Hitachi, Ltd. 2019. All rights reserved.
Keycloakの起動
15
• bin/standalone.bat を実行
• Application Server(Wildfly)、お試し用のDBMS(H2DB)が
付属しているためそのまま動作する
- 17. © Hitachi, Ltd. 2019. All rights reserved.
情報源
16
・ 公式ドキュメントが充実していますので、まずはこちら
https://www.keycloak.org/documentation.html
・ 日本語もあります(NRIさん)
https://keycloak-documentation.openstandia.jp/
・ @ITさんKeycloak超入門
https://www.atmarkit.co.jp/ait/series/7363/
- 19. © Hitachi, Ltd. 2019. All rights reserved.
Red Hat Summitで最新動向探ってきました
18
Red Hat Summit会場にて、
Keycloak主要メンバ(マネージャのMikeさん、主要開発者のMarekさん)と、
日本コミュニティの打ち合わせを開催
トピック:
• Financial API (FAPI)について(後述)
• WebAuthnについて(後述)
• ロードマップについて
Red Hat Summit(2019/5/7-9@Boston)
・ 日本コミュニティとのmeeting
・ セッション :
・ Keycloakに関連したセッションは一つだけ
「Security for Open Banking, PSD2, FAPI」
・ 他のOpenShiftやIntegrationミドルのセッションで部品として
触れられている形
- 20. © Hitachi, Ltd. 2019. All rights reserved.
FAPI対応について: FAPIとは
19
OAuth
OpenID
Connect
(OIDC)
「アクセストークン」をやり取りする認可の仕様。
自由度が高く、そのまま使うと
セキュリティホールを作り込んでしまう。
OAuthの使い方を縛り、かつ
「アクセストークン」の中に「ID情報」を
含めてやり取りできる仕様
⇒まだ自由度は高く、使い方によって
セキュリティレベルがバラバラ
OAuth/OIDCの安全な使い方を規定。
オプション仕様の使い方、下のレイヤ
(SSL/TLS)の使い方等。
APIの形式などは規定されていない。
FAPI
2019年4月にFAPIのCertificationがOpenID Foundationで開始。
Conformance Testも公開
・金融API公開にあたっての OAuth/OIDCの安全な使い方の規定。
OpenID Foundationで策定中。UKのOpenbankingで採用、世界中で採用広まりつつある
Part1(ReadOnly、照会系API向け), Part2(ReadWrite,更新系API向け)
が、現在Implementer’s draft。 最近CIBAプロファイルも出ました。
- 21. © Hitachi, Ltd. 2019. All rights reserved.
KeycloakのFAPIへの対応状況
20
JIRA Ticket 概要 Pull
Request
対応
バージョン
KEYCLOAK-2604 RFC 7636(PKCE)対応 3831 3.1.0
KEYCLOAK-5661 アクセストークンにスコープを返す 4527 3.4.0
KEYCLOAK-5811 Support client authentication in
client_secret_jwt
4835 4.0.0
KEYCLOAK-6700 Support s_hash 5022 4.0.0
KEYCLOAK-6771 Support Holder of Key mechanism
for Tokens ([mtls]対応)
5083 4.0.0
KEYCLOAK-6768 IDトークン暗号化 (optional) 5779 レビュー中
KEYCLOAK-6770 トークン類の ES256/384/512 署名 5533 4.5.0
KEYCLOAK-8460 リクエストオブジェクトの
ES256/384/512署名
5603 4.7.0
KEYCLOAK-9756 トークン&リクエストオブジェクトの
PS256/384/512署名対応
5974 6.0.0
机上検証し、必要な機能群を乗松さん中心に実装
CIBAはまだですが、
Part1,2は概ね実装できたと思っています。
- 22. © Hitachi, Ltd. 2019. All rights reserved.
FAPIのConformance Testパスに向けて
21
・ Keycloakコミュニティとしても、FAPIのテストをパスさせる予定。
⇒ 実態としては日本勢に期待されている。
コミュニティ打合せの結果、次の日の
セッション「Security for Open Banking, PSD2, FAPI」にて、
“We Partner with Hitachi for Open Conformance Testing for FAPI”
と記載
・ 「OSSセキュリティ技術の会」を通じて日本勢で取組中。
・ 課題解決に向けて下記技術の会Githubで議論中、適宜upstream。
https://github.com/jsoss-sig/keycloak-fapi/
- 23. © Hitachi, Ltd. 2019. All rights reserved.
WebAuthnについて
22
・ まずは、2FA対応予定
・ WebAuthnロジックそのものについては、Keycloak本体に
持つつもりは無く、外部ライブラリ活用の方針
・ ライブラリとしては、現在webauthn4jが有力候補。
認証プラグイン(authenticator)も合わせて開発・提案中。
https://github.com/webauthn4j/keycloak-webauthn-authenticator
・ 多要素認証全般についてアーキテクチャ見直しが進んでおり
githubで延々議論中。
https://github.com/keycloak/keycloak-community/pull/5
⇒ これらに伴いSPIが変更になる可能性があり、要注意。
- 24. © Hitachi, Ltd. 2019. All rights reserved.
WebAuthn authenticator開発状況
23
こちらにて開発中。使い方もあります
https://github.com/webauthn4j/keycloak-webauthn-authenticator
一通り動くものはでき、keycloak-devで議論しながらブラッシュアップ中。
OS ブラウザ 認証器 ユースケース
Windows10 Chrome
Firefox
Yubico security Key 2要素認証
Edge PC内蔵指紋認証器 2要素認証
指だけ認証
MacOS Mojave Chrome
Firefox
Yubico security Key 2要素認証
Android 8.1 Chrome 内蔵指紋認証器 確認中
下記で動作確認済(&中)
- 25. © Hitachi, Ltd. 2019. All rights reserved.
Keycloakにユーザプロファイル登録 (1)
24
ここのパスワード
入力は不要にする予定
- 29. © Hitachi, Ltd. 2019. All rights reserved.
WebAuthn対応: 今後の予定
28
・ webauthn4j, authenticatorともに、Keycloakコミュニティ側には認知
(newsletterに掲載されたので)
・ keycloak-community repoにdesignドキュメント出して、本格的に入れ
込み開始予定
・ Keyconf19でも議論予定
- 31. © Hitachi, Ltd. 2019. All rights reserved.
Keycloakコミュニティトピック
30
・ バージョニングポリシー
4半期に1回、メジャーバージョン番号が上がるようになった。
Continuous delivery modelのためらしいが。。
https://www.keycloak.org/2019/04/versioning.html
・ ブログの刷新
https://www.keycloak.org/blog.html
- 「Keycloak news letter」が月1ぐらい出るように。
- ゲスト記事も受け付けるようになった。Keycloak-users等で申し出ればいい模様。
・ keycloak-community リポジトリ
MLでは議論が収束しなそうな大き目のトピックについては、
https://github.com/keycloak/keycloak-community
にdesignドキュメントをPR出して進めることができるように
・ KeyConf19
Keycloakの初のカンファレンス。UKで6/12,13開催予定。
https://www.hartree.stfc.ac.uk/Pages/KeyConf.aspx
- 32. 31© Hitachi, Ltd. 2019. All rights reserved.
他社所有商標に関する表示
• HITACHIは、株式会社 日立製作所の商標または登録商標です。
• Red Hatは米国およびその他の国におけるRed Hat, Inc.の登録商標です。
• GitHub は、GitHub Inc.の米国およびその他の国における商標または登録商標です。
• TwitterはTwitter Inc.の米国およびその他の国における商標または登録商標です。
• FacebookはFacebook Inc.の米国およびその他の国における商標または登録商標です。
• Kubernetesは米国およびその他の国におけるThe Linux Foundationの登録商標です。
• OpenShiftは米国およびその他の国におけるRed Hat, Inc.の登録商標です。
• その他記載の会社名、製品名などは、それぞれの会社の商標もしくは登録商標です。