Introducing KeyCloak setting methods using client policy and FAPI reference implementation
current location
Think IT > カテゴリ一覧 > 運用・管理 > セキュリティPRセキュリティ技術解説連載 [第3回] :KeycloakのFAPI 1.0対応で実現する高度なAPIセキュリティ2021年12月21日(火) 茂木 昂士(もぎ たかし)Tweet連載3回目となる今回は、FAPIのリファレンス実装を利用して、FAPI 1.I will check the operation of 0.In the third installment, KeyCloak is set using the client policy introduced last time, and FAPI 1 using the FAPI reference implementation released on GitHub..I will check the operation of 0.
Regarding FAPI reference implementation
Including KeyCloak, FAPI 1.There are several implementation of the licensed server corresponding to 0, and information about the implementation has been published.However, at present, there is almost no information on the implementation of the client / resource server or the corresponding library / framework.FAPI 1.In order to promote the spread of 0, we have released FAPI reference implementation in conjunction with this series.For this reference implementation, use Spring Boot and Nimbus Jose + JWT to FAPI 1.I created a client and resource server corresponding to 0.
This time, we will set up KeyCloak to operate this reference implementation, and a brief explanation of the client / resource server.In addition, the details of the implementation contents and the explanation of the operation will be provided in the fourth.
The file / directory configuration for reference implementation is as follows.
hitachi-fapi-java├── README.md├── client// クライアントアプリケーション│├── src│└── pom.xml├── server// リソースサーバ│├── src│└── pom.xml├── keycloak-export.json // 認可サーバ用 import 用ファイル├── keycloak.p12// 認可サーバ用 HTTPS 用 keystore├── truststore.p12 // 認可サーバ用 Trust Store└── pom.xml
Use the key / certificate settings and the files that are exported from the set Keycloak are also available.
KeyCloak settings
From now on, we will set KeyCloak to operate the reference implementation application.KeyCloak version is the latest 15 at the time of writing.0.Use 2.
First, set HTTPS/MTLS for the application server (Wildfly) where KeyCloak runs.For MTLS, ENABLE X of the Server Administration documentation.509 Set with reference to Client Certificate User Authentication.In the document, X for user authentication.It is a setting for using the 509 certificate, but it is the same setting when used for client authentication.
First, create a new Security-Realm, set the information on the certificate used for HTTPS and the TrustStore to verify MTLS.If you want to operate simply by confirming the operation, etc., the set keystore file (Keycloak) in the repository.P12, Truststore.P12) is also available.
List 1: Create Security-Realm and set TrustStore
After setting of Security-Realm, set it for https-Listener.MTLS is enabled by setting Verify-Client of https-Listener to Requested.
List 2: Https-Listener setting
Finally, set the TrustStore SPI to use when KeyCloak communicates with an external server.This time, it is necessary because you use your self -certificate.For details on the settings, see KeyCloak's Server Installation Document Outgoing HTTPS Request TrustStore.
List 3: Truststore SPI settings
That's all for the setting before starting KeyCloak.
The subsequent settings create a Realm called FAPI and set it to the Realm.
Fapi Advanced Security Profile 1 with reference to the 2nd article.0のクライアントポリシーを作成します。クライアントポリシーを作成すると、fapi1advというロールがついたクライアントにポリシーが適用されるようになります。
FAPI 1.In 0, PS256 or ES256 is required for the ID token signature algorithm.The KeyCloak initialization does not have a key pair corresponding to these signature algorithms.We will create the necessary key pairs to support these signature algorithms.
First, select the Realm Settings → Keys → Providers tab and "Add Keystore...」からrsa-generated(ES256を利用する場合はecdsa-generated)をクリックします。
Added Key Provider
When you click, the setting item of the key pair to be created is displayed. Select PS256 (or P-256) in Algorithm and click Save.
rsa-generated Added Key Provider
When the key pair is created, the key with the ALGORITHM PS256 and ES256 is displayed in the list of Active tabs.
PS256, ES256 key addition results
From here, create a client and make the necessary settings.The outline of the client is as follows.
# | client id | Access Type | 役割 |
---|---|---|---|
1 | fapi-client | Confidential | クライアントアプリケーション |
2 | fapi-resource-server | bearer-only | リソースサーバー |
Add a FAPI1ADV roll to the client application to apply the client policy to the created client.
Add a roll
Valid Redirect URIsにはクライアントアプリケーションのパスを指定します。今回のサンプルアプリケーションではhttps://localhost:8082/callbackを指定してください。
Details of ID token and request object signature algorithms and encryption algorithms will be performed at Fine Grain OpenID Connect Configuration.
Signing, encryption algorithm setting
The required settings are as follows.
# | 設定項目 | 設定値 | 備考 |
---|---|---|---|
1 | ID Token Encryption KeyManagement Algorithm | - | IDトークンの暗号化を行う場合はRSA-OAEPまたはRSA-OAEP-256を選択する |
2 | ID Token Encryption Content Encryption Algorithm | - | IDトークンの暗号化を行う場合は選択が必要 |
3 | Request Object Signature Algorithm | PS256 | ES256でも動作可能 |
4 | Request Object Required | request only |
Fapi 1 for ID token encryption.0では必須ではありませんが、今回のリファレンス実装では暗号化にも対応しています。IDトークンの暗号化を試したい場合は、ID Token Encryption Key Management Algorithmに設定した値を、クライアントのapplication.yamlファイルに指定してください。
FAPI 1.0では、クライアント認証方式としてtls_client_auth(クライアント証明書による認証)とprivate_key_jwt(JWTを利用した認証)の2つの方式が規定されています。リファレンス実装ではデフォルトでtls_client_authを使うように設定されているため、ここではtls_client_authの設定方法を説明します。
Setting of client authentication method
クライアントのCredentialsタブで、クライアントの認証方式を設定します。tls_client_authを利用する場合は、Client AuthenticatorにX509 Certificateを指定します。Subject DNには、クライアント証明書で設定したDN(Distinguished Name)を設定します。リファレンス実装では設定済みの証明書があるので、その証明書にあわせてクライアントにはCN=fapi-client、リソースサーバにはCN=fapi-resource-serverと設定します。
Finally, set the key information used to sign the request object and encrypt the ID token.This setting is only for client applications.
Key information settings
リファレンス実装ではJWKを公開するURLを用意しているので、Use JWKS URLをONに、JWKS URLにhttps://localhost:8082/jwk_setを設定します。
This completes the KeyCloak settings.
Operation confirmation using reference implementation
From here, we will use the reference implementation application to check simple operation.
Execute the following command and start the client application and resource server.
List 4: Starting the client application
$ cd client$ mvn spring-boot:run
List 5: Start the resource server
$ cd server$ mvn spring-boot:run
If there is no error, the client will start on the 8082 port and the resource server will be launched on the 8081 port.
First, open https: // localhost: 8082/in the browser to access the client.
Top screen of client application
この画面から、アクセストークンの取得やリフレッシュ/失効、APIリクエストの実行が行えます。Get Tokenボタンを押下すると認可リクエストが作成され、Keycloakの認可エンドポイントにリダイレクトされます。
Login in KeyCloak
設定済みのファイルをインポートしている場合はuser/passで認証ができます。認証が成功すると、アクセストークン、リフレッシュトークン、IDトークンがそれぞれ取得できます。
Access token acquisition results
アクセストークンの取得後にCall APIボタンを押下すると、アクセストークン付きのAPIリクエストが実行できます。リソースサーバには、下記のエンドポイントを用意してあります。
# | パス | 返却値 |
---|---|---|
1 | / | 固定値({"status" : "ok" }) |
2 | /me | 認証されたユーザの情報(username、sub claim) |
3 | /echo/{value} | {value}で指定された値 |
4 | /introspection | Token Introspectionの結果 |
5 | /headers | リクエストヘッダーの内容 |
summary
This time, the setting method using the KeyCloak client policy and FAPI 1.Introducing a simple operation using the reference implementation corresponding to 0.
Next time, I will explain in more detail how to implement the reference implementation and how to use it.
Tweet keycloak / FAPI / Spring Boot / Nimbus Jose / JWT前の記事第2回KeyCloak client policy (Client Policies) 次の記事第4回FAPI 1.How to make client applications and resource servers compliant with 0 著者茂木 昂士(もぎ たかし)この著者の記事一覧この著者の記事一覧株式会社日立製作所 OSSソリューションセンタ株式会社日立製作所 OSSソリューションセンタ所属。これまではソフトウェアエンジニアとしてストレージやサーバの管理ソフトウェア開発に従事してきた。現在は、主にアイデンティティー管理OSSやAPI管理OSSの検証、導入支援を行っている。Serial back number
セキュリティ技術解説第4回FAPI 1.How to make client applications and resource servers compliant with 0
2022/1/18連載4回目となる今回は、FAPI 1.How to make client applications and resource servers compliant with 0を解説します。続きを読むセキュリティ技術解説第3回Introducing KeyCloak setting methods using client policy and FAPI reference implementation
2021/12/21連載3回目となる今回は、FAPIのリファレンス実装を利用して、FAPI 1.I will check the operation of 0.続きを読むセキュリティ技術解説第2回KeyCloak client policy (Client Policies)
2021/11/9連載の2回目となる今回は、さまざまなセキュリティプロファイルをサポートするための仕組み、クライアントポリシーをご紹介します。続きを読むTHINK IT e -mail magazine member registration is being accepted
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。See the service contents of THINK IT e -mail magazine members