FAPI 1.0に準拠したクライアントアプリケーションと リソースサーバの作り方
リファレンス実装の使い方
次に、上記の方法で実装したリファレンス実装の使い方を説明します。
設定方法
リファレンス実装を使うためには、クライアントアプリケーションとリソースサーバの設定をする必要があります。クライアントアプリケーションの設定は設定ファイルfapi-sample/client/src/main/resources/application.yamlで行います。クライアントアプリケーションの設定ファイルの設定項目を表2にまとめます。
設定項目 | 説明 |
---|---|
server: | |
port | クライアントアプリケーションのポート番号を設定します |
server: ssl: | |
key-store | クライアントアプリケーションのクライアント証明書が格納されているキーストアのパスを設定します |
key-store-password | キーストアのパスワードを設定します |
trust-store | クライアントアプリケーションが信頼している証明書が格納されているトラストストアのパスを設定します |
trust-store-password | トラストストアのパスワードを設定します |
fapi: config: | |
issuer | Keycloakの識別子を設定します |
client-id | クライアントアプリケーションのクライアントIDを設定します |
client-auth-method | クライアント認証方法を設定します。クライアント認証にprivate_key_jwt を使用する場合は、private_key_jwtを設定し、tls_client_auth を使用する場合は、tls_client_authを設定します |
resource-servers | リソースサーバのURLを設定します |
scopes | scopeパラメータに含める値を設定します |
jws-alg | 署名アルゴリズムを設定します |
jwe-alg | JWEでJWSを暗号化した共有鍵を暗号化する暗号アルゴリズムを設定します |
一方、リソースサーバの設定は設定ファイルfapi-sample/server/src/main/resources/application.yamlで行います。リソースサーバの設定ファイルの設定項目を表3にまとめます。
設定項目 | 説明 |
---|---|
server: | |
port | リソースサーバのポート番号を設定します |
server: ssl: | |
key-store | リソースサーバの証明書が格納されているキーストアのパスを設定します |
key-store-password | キーストアのパスワードを設定します |
trust-store | リソースサーバが信頼している証明書が格納されているトラストストアのパスを設定します |
trust-store-password | トラストストアのパスワードを設定します |
client-auth | クライアント認証のタイプを設定します。リソースサーバはOAuth MTLSでクライアントアプリケーションからクライアント証明書を受け取る必要があるため、クライアント認証を義務付けるneedを設定します |
fapi: resource-server: config: | |
issuer | Keycloakの識別子を設定します |
allowed-scope | リソースへのアクセスに必要なスコープを設定します |
filtered-path | APIリクエスト検証で保護すべきリソースサーバのパスを設定します。パスに依らず、すべてのAPIリクエストを検証する場合、nullを設定します |
client-id | リソースサーバのクライアントIDを設定します |
リファレンス実装を使用する際は、必要に応じてそれぞれの設定ファイルを編集してください。
クライアントアプリケーションの使い方
第3回ですでに動作確認をしているため、ここではクライアントアプリケーションの使い方について説明します。まずクライアントアプリケーションを使うために、クライアントアプリケーションを起動させます。起動方法は第3回をご参照ください。そして、ブラウザでhttps://localhost:8082にアクセスします。すると、ブラウザにはクライアントアプリケーションのホーム画面が表示されます(図2)。
ホーム画面には4つのボタンがあります。それぞれのボタンの用途について表4にまとめます。
ボタン | 用途 | クライアントアプリケーションが行う処理 |
---|---|---|
Get Token | トークンを取得する | - リクエストオブジェクトの作成 - 認可リクエスト - 認可レスポンス検証 ※分離署名であるIDトークンの検証などを含む - トークンリクエスト - トークンレスポンス検証 |
Refresh Token | トークンリフレッシュをする。 | - リフレッシュリクエスト - トークンレスポンス検証 |
Revoke Token | トークンを無効化する | - リボケーションリクエスト |
Call API | ServerとPathに設定されたURL にAPIリクエストをする | - APIリクエスト ※APIリクエストはリソースサーバに送られ、リソースサーバはOAuth MTLS検証などを行う |
Conformance testの紹介
OpenID財団はFAPI 1.0に関するクライアントアプリケーションのConformance testを提供しています。このConformance test をパスすることで、FAPI 1.0に準拠していることを証明でき、さらにOpenID財団に申請すると、Certificationを取得でき、Certificationを取得したクライアントアプリケーションはOpenID Certificationページに掲載されます。今回、リファレンス実装のクライアントアプリケーションでConformance testを実施してみました(図3)。
Conformance testをパスしていることがわかります。これより、リファレンス実装のクライアントアプリケーションがFAPI 1.0に準拠していることを証明できました。
おわりに
本連載では、KeycloakのFAPI 1.0対応で実現する高度なAPIセキュリティと題し、FAPI 1.0の概要からKeycloakのFAPI対応、クライアントポリシーを用いたKeycloakの設定方法、Keycloakと連携するFAPIに準拠したリファレンス実装、さらにFAPI 1.0に準拠したクライアントアプリケーションとリソースサーバの作り方を紹介しました。現在FAPI-SIGでは、FAPI 2.0のサポートに向けた活動を推進中です。このように進化を続けるKeycloakを、この機会に使ってみてはいかがでしょうか。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- クライアントポリシーを利用したKeycloakの設定方法と、FAPIリファレンス実装の紹介
- Oracle Cloud Hangout Cafe Season4 #4「マイクロサービスの認証・認可とJWT」(2021年7月7日開催)
- FAPIとKeycloakの概要
- Keycloakを用いたハードニングの実装方法
- APIセキュリティのハードニング
- コンテナ上のマイクロサービスの認証強化 ~IstioとKeycloak~
- Keycloakのクライアントポリシー(Client Policies)
- KeycloakによるAPIセキュリティの基本
- 3scaleの基本的な使い方
- Keycloakのインストールと構築例