FAPI 1.0に準拠したクライアントアプリケーションと リソースサーバの作り方

2022年1月18日(火)
岡井 倫人(おかい みちと)
連載4回目となる今回は、FAPI 1.0に準拠したクライアントアプリケーションと リソースサーバの作り方を解説します。

リファレンス実装の使い方

次に、上記の方法で実装したリファレンス実装の使い方を説明します。

設定方法

リファレンス実装を使うためには、クライアントアプリケーションとリソースサーバの設定をする必要があります。クライアントアプリケーションの設定は設定ファイルfapi-sample/client/src/main/resources/application.yamlで行います。クライアントアプリケーションの設定ファイルの設定項目を表2にまとめます。

表2:クライアントアプリケーションの設定ファイルの設定項目

設定項目説明
server: 
portクライアントアプリケーションのポート番号を設定します
server: ssl: 
key-storeクライアントアプリケーションのクライアント証明書が格納されているキーストアのパスを設定します
key-store-passwordキーストアのパスワードを設定します
trust-storeクライアントアプリケーションが信頼している証明書が格納されているトラストストアのパスを設定します
trust-store-passwordトラストストアのパスワードを設定します
fapi: config: 
issuerKeycloakの識別子を設定します
client-idクライアントアプリケーションのクライアントIDを設定します
client-auth-methodクライアント認証方法を設定します。クライアント認証にprivate_key_jwt を使用する場合は、private_key_jwtを設定し、tls_client_auth を使用する場合は、tls_client_authを設定します
resource-serversリソースサーバのURLを設定します
scopesscopeパラメータに含める値を設定します
jws-alg署名アルゴリズムを設定します
jwe-algJWEでJWSを暗号化した共有鍵を暗号化する暗号アルゴリズムを設定します

一方、リソースサーバの設定は設定ファイルfapi-sample/server/src/main/resources/application.yamlで行います。リソースサーバの設定ファイルの設定項目を表3にまとめます。

表3:リソースサーバの設定ファイルの設定項目

設定項目説明
server: 
portリソースサーバのポート番号を設定します
server: ssl: 
key-storeリソースサーバの証明書が格納されているキーストアのパスを設定します
key-store-passwordキーストアのパスワードを設定します
trust-storeリソースサーバが信頼している証明書が格納されているトラストストアのパスを設定します
trust-store-passwordトラストストアのパスワードを設定します
client-authクライアント認証のタイプを設定します。リソースサーバはOAuth MTLSでクライアントアプリケーションからクライアント証明書を受け取る必要があるため、クライアント認証を義務付けるneedを設定します
fapi: resource-server: config: 
issuerKeycloakの識別子を設定します
allowed-scopeリソースへのアクセスに必要なスコープを設定します
filtered-pathAPIリクエスト検証で保護すべきリソースサーバのパスを設定します。パスに依らず、すべてのAPIリクエストを検証する場合、nullを設定します
client-idリソースサーバのクライアントIDを設定します

リファレンス実装を使用する際は、必要に応じてそれぞれの設定ファイルを編集してください。

クライアントアプリケーションの使い方

第3回ですでに動作確認をしているため、ここではクライアントアプリケーションの使い方について説明します。まずクライアントアプリケーションを使うために、クライアントアプリケーションを起動させます。起動方法は第3回をご参照ください。そして、ブラウザでhttps://localhost:8082にアクセスします。すると、ブラウザにはクライアントアプリケーションのホーム画面が表示されます(図2)。

図2:クライアントアプリケーションのホーム画面

図2:クライアントアプリケーションのホーム画面

ホーム画面には4つのボタンがあります。それぞれのボタンの用途について表4にまとめます。

表4:クライアントアプリケーションに表示されるボタンの用途

ボタン用途クライアントアプリケーションが行う処理
Get Tokenトークンを取得する- リクエストオブジェクトの作成
- 認可リクエスト
- 認可レスポンス検証
※分離署名であるIDトークンの検証などを含む
- トークンリクエスト
- トークンレスポンス検証
Refresh Tokenトークンリフレッシュをする。- リフレッシュリクエスト
- トークンレスポンス検証
Revoke Tokenトークンを無効化する- リボケーションリクエスト
Call APIServerと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)。

図3:Conformance testの結果

図3:Conformance testの結果

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を、この機会に使ってみてはいかがでしょうか。

著者
岡井 倫人(おかい みちと)
株式会社日立製作所 OSSソリューションセンタ
2020年7月からOSSソリューションセンタに配属。認証周りのOSSの開発、サポートに従事。 Keycloakコミュニティのコントリビュータである。

連載バックナンバー

セキュリティ技術解説
第4回

FAPI 1.0に準拠したクライアントアプリケーションと リソースサーバの作り方

2022/1/18
連載4回目となる今回は、FAPI 1.0に準拠したクライアントアプリケーションと リソースサーバの作り方を解説します。
セキュリティ技術解説
第3回

クライアントポリシーを利用したKeycloakの設定方法と、FAPIリファレンス実装の紹介

2021/12/21
連載3回目となる今回は、FAPIのリファレンス実装を利用して、FAPI 1.0の動作を確認していきます。
セキュリティ技術解説
第2回

Keycloakのクライアントポリシー(Client Policies)

2021/11/9
連載の2回目となる今回は、さまざまなセキュリティプロファイルをサポートするための仕組み、クライアントポリシーをご紹介します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています