Keycloakを使ったJWT検証によってルートをサービスプロバイダーとして作成
手順
-
[Palette] (パレット)からデザインワークスペースに、cBeanRegisterコンポーネントを、cRESTコンポーネント、cRecipientListコンポーネント、cDirectコンポーネント(5つ)、cSetBodyコンポーネント、cLogコンポーネントをドラッグ&ドロップします。
- ロールがさらに識別しやすくなるようコンポーネントにラベルを付け、上記のように[Row] (行) > [Route] (ルート)接続を使ってリンクします。
-
cBeanRegisterコンポーネントの[Basic settings] (基本設定)ビューで、Idフィールドに"customers"と入力します。[Customized] (カスタマイズ)オプションを選択し、[Code] (コード)ボックスに次のコードを入力します:
beans.Customers customers = new beans.Customers(); beans.Customer customer = new beans.Customer(); customer.setFirstName(TalendDataGenerator.getFirstName()); customer.setLastName(TalendDataGenerator.getLastName()); customer.setCity(TalendDataGenerator.getUsCity()); customers.addCustomer(customer); customer = new beans.Customer(); customer.setFirstName(TalendDataGenerator.getFirstName()); customer.setLastName(TalendDataGenerator.getLastName()); customer.setCity(TalendDataGenerator.getUsCity()); customers.addCustomer(customer); customer = new beans.Customer(); customer.setFirstName(TalendDataGenerator.getFirstName()); customer.setLastName(TalendDataGenerator.getLastName()); customer.setCity(TalendDataGenerator.getUsCity()); customers.addCustomer(customer); beanInstance = customers;
-
cRESTコンポーネントの[Basic settings] (基本設定)ビューで:
- [Endpoint] (エンドポイント)フィールドに"/services/customers"と入力します。
- [Type] (タイプ)リストから[Manual] (手動)を選択して、REST APIマッピングを手動で決定します。
- [REST API mapping] (REST APIマッピング)テーブルで[+]をクリックして、テーブルに行を追加します。[Output Flow] (出力フロー)フィールドに、名前としてgetAllCustomersと入力します。HTTP VerbリストからGETを選択します。他のカラムはデフォルト設定のままにします。
- 前のステップを繰り返し、上のスクリーンショットにあるように、getCustomer、addCustomer、updateCustomer、deleteCustomerという出力フローを、対応するHTTP動詞、URIパターン、コンシューマー、プロデューサー、Beanクラスと共に追加します。
- [Security] (セキュリティ)チェックボックスと[JWT Bearer Token] (JWT Bearerトークン)スキームをを選択します。
- [KeyStore Type] (KeyStoreタイプ)で、JSON Web Key Sets (JWKS)を選択します。
- JWKS URLフィールドに、"http://localhost:8080/realms/MyDemoRealm/protocol/openid-connect/certs"と入力します。
- [Audience] (オーディエンス)フィールドに、"account"と入力します。
-
cRESTコンポーネントの[Advanced settings] (詳細設定)ビューで:
- [Log messages] (ログメッセージ)チェックボックスを選択します。
- [JAXRS Properties] (JAXRSプロパティ)テーブルに"rs.security.accept.public.key"プロパティを追加し、値を"true"にします。
-
cRecipientListコンポーネントの[Basic settings] (基本設定)ビューで、[Language] (言語)リストから[Simple] (シンプル)を選択し、[Expression] (式)フィールドに"direct:${header.operationName}"と入力します。
-
getAllCustomersというラベルが付いたcDirectコンポーネントの[Basic settings] (基本設定)ビューで、[Name] (名前)フィールドに"getAllCustomers"と入力します。
このステップを繰り返し、次のラベルでcDirectの各コンポーネントに名前を入力します。
- getCustomer: "getCustomer"
- addCustomer: "addCustomer"
- updateCustomer: "updateCustomer"
- deleteCustomer: "deleteCustomer"
-
getAllCustomersというラベルが付いたcSetBodyコンポーネントの[Basic settings] (基本設定)ビューで、[Language] (言語)リストから[Simple] (シンプル)を選択し、[Expression] (式)フィールドに"${ref:customers}"と入力します。
このステップを繰り返し、次のラベルでcSetBodyの各コンポーネントに単純式を入力します。
- getCustomer: "${bean:customers.getCustomer}"
- addCustomer: "${bean:customers.addCustomer}"
- updateCustomer: "${bean:customers.updateCustomer(${body[0]}, ${body[1]})}"
- deleteCustomer: "${bean:customers.deleteCustomer}"
-
cLogコンポーネントはデフォルト設定のままにしておきます。
-
Studioでルートを実行します。
RESTサービスは、JWT検証が有効な状態でhttp://localhost:8090/services/customers/で利用できるようになります。
-
PostmanからGETリクエストを送信します。
- [Auth Type] (認証タイプ)リストで、OAuth 2.0を選択します。
- [Add authorization data to] (認証データの追加先)リストで、[Request Headers] (リクエストヘッダー)を選択します。
- [Token] (トークン)フィールドに、http://localhost:8080/realms/MyDemoRealm/protocol/openid-connect/tokenから取得したアクセストークンをコピーします。
RESTサービスから正常なレスポンスが返ってきます。