機械翻訳について

JWTシグネチャ・セキュリティ・ポリシーを使用したトリガー接続定義の実装

この手順では、JWTシグネチャ・セキュリティ・ポリシーを使用するトリガー接続定義の実装方法の概要を示します。

前提条件:

webフックがどのように署名されるかについては、Webフック・プロデューサのドキュメントを確認してください。 次の情報を収集します:

  • JWTトークンがリクエストの一部として送信される場所
  • 検証するカスタム要求がある場合
  • HMACまたはRSAシグネチャを使用するかどうか
  • シグネチャ・キー
  • 症例請求の上書き
  1. Visual Studio Codeエディタでアダプタ定義ドキュメントを開きます。
  2. ドキュメントのconnectionコード・セクションに移動し、スコープをTRIGGERに設定します。
  3. 前提条件で収集した情報に従って、セキュリティ・プロパティの値を設定します。

    コード・サンプル1は次のとおりです:

    • JWTトークンは、認可ヘッダー(.request.headers.authorization|split(" ")|.[1]から抽出されます。
    • シグネチャ・キーは、同じポリシーのsecurityProperty signKey部分に追加され、jwtVerifyファンクション(.securityProperties.signKey)で参照されます。 このキーは、JWT発行者の別名JWK URL (https://www.demosvc.com/oauth2/v3/certsなど)に解決されます。
    • 検証するカスタム要求がありません。
    • デフォルトのサブジェクト請求(上書きなし)。
    {
     "connection": {
         
        "securityPolicies": [
           {
                "type": "managed",
                "policy": "JWT_VALIDATION",
                "securityProperties": [
                    {
                        "name": "jwtToken",
                        "displayName": "JWT Token",
                        "hidden": true,
                        "required": true,
                        "default": "${.request.headers.authorization|split(\" \")|.[1]}"
                    },
                    {
                        "name": "signatureKey",
                        "displayName": "JWK URL",
                        "hidden": true,
                        "required": true,
                        "default": "https://www.demosvc.com/oauth2/v3/certs"
                    },
                     {
                        "name": "subjectClaim",
                        "displayName": "Subject claim Override",
                        "hidden": true,
                        "required": false,
                        "default": ""
                    },
                    {
                        "name": "customClaimsValidation",
                        "displayName": "Custom Claims Validation",
                        "hidden": true,
                        "required": false,
                        "default": ""
                    }
                ]
            }
        ]
      }
    }

    コード・サンプル2は次のとおりです:

    • JWTトークンは認可ヘッダー(.request.headers.authorization|split(" ")|.[1])から抽出されます
    • シグネチャ・キーは、同じポリシーのsecurityProperty signKey部分に追加され、jwtVerifyファンクション(.securityProperties.signKey)で参照されます。 このキーは、JWT発行者の別名JWK URL (https://www.dummysvc.com/oauth2/v3/certsなど)に解決されます
    • Eメールは件名要求です
    • カスタム請求発行者検証
    {
     "connection": {
         
        "securityPolicies": [
           {
                "type": "managed",
                "policy": "JWT_VALIDATION",
                "securityProperties": [
                    {
                        "name": "jwtToken",
                        "displayName": "JWT Token",
                        "hidden": true,
                        "required": true,
                        "default": "${.request.headers.authorization|split(\" \")|.[1]}"
                    },
                    {
                        "name": "signatureKey",
                        "displayName": "JWK URL",
                        "hidden": true,
                        "required": true,
                        "default": "https://www.dummysvc.com/oauth2/v3/certs"
                    },
                     {
                        "name": "subjectClaim",
                        "displayName": "Subject claim Override",
                        "hidden": true,
                        "required": false,
                        "default": "email"
                    },
                    {
                        "name": "customClaimsValidation",
                        "displayName": "Custom Claims Validation",
                        "hidden": true,
                        "required": false,
                        "default": "${{\"iss\": \"https://dummyIssuer\"}}"
                    }
                ]
            }
        ]
      }
    }

    次に、フローのコード・サンプル3を示します:

    • トークン、署名キー、カスタム要求およびサブジェクト要求が含まれます。
    • シグネチャ・キーをフェッチします。
    • jq関数を使用します。
    {
     "connection": {
         
        "securityPolicies": [
           {
                "type": "managed",
                "policy": "JWT_VALIDATION",
                "securityProperties": [
                    {
                        "name": "jwtToken",
                        "displayName": "JWT Token",
                        "hidden": true,
                        "required": true,
                        "default": "${.request.headers.authorization|split(\" \")|.[1]}"
                    },
                    {
                        "name": "signatureKey",
                        "displayName": "JWK URL",
                        "hidden": true,
                        "required": true,
                        "default": "flow:getCerts"
                    },
                     {
                        "name": "subjectClaim",
                        "displayName": "Subject claim Override",
                        "hidden": true,
                        "required": false,
                        "default": "email"
                    },
                    {
                        "name": "customClaimsValidation",
                        "displayName": "Custom Claims Validation",
                        "hidden": true,
                        "required": false,
                        "default": ""
                    }
                ]
            }
        ]
      }
    } 
     
       "flows": {
        "getCerts": {
          "id": "getCerts",
          "description": "getCerts",
          "specVersion": "0.8",
          "version": "0.1",
          "start": "startState",
          "functions": [
            {
              "name": "getCertificate",
              "type": "expression",
              "operation": "{\"certificates\":[\"-----BEGIN CERTIFICATE-----\\nMIIbTAe\\nFw0GVy\\nYX\/wQCMAAw\nIYX\\n-----END CERTIFICATE-----\"]}"
            }
          ],
          "states":[
            {
              "name":"startState",
              "type":"operation",
              "actions":[
                {
                  "functionRef": "getCertificate",
                  "actionDataFilter": {
                    "results": "${.certificates}"
                    "toStateData": "${ .output }"
                  }
                }
              ]
              "end": true
            }
          ]
        }
      } }