ハウツーガイド:カスタムアクションの有効化

このページは機械翻訳により提供されています。翻訳内容と英語版に相違がある場合は、英語版が優先されます。

このセグメントでは、カスタムアクションを効果的に有効化する方法について説明します。 カスタムアクションは、コネクターのユーザー向けに"Catch All"を実装する優れた方法です。 カスタムアクションから送信されるすべてのリクエストは、トークンなどの認可の詳細と、トークン更新のための認可ロジックを継承することに注意してください。

アクションのタイムアウト

SDKアクションには180秒のタイムアウト制限があります。

checkpoint!メソッドをファイルストリーミングアクションで使用すると、タイムアウト制限を超えるファイルを転送できます。 checkpoint!メソッドは、アクションの実行時間を確認します。 120秒を超えると、Workatoは公平な処理を確保するために、わずかな遅延を挟んでタイムアウトを更新します。

サンプルコネクターコード

ruby
{
  title: 'Acme',
  connection: {
    fields: [
      {
        name: 'client_id',
        control_type: 'text',
        label: 'OAuth App Client ID',
        optional: 'false'
      },
      {
        name: 'client_secret',
        control_type: 'password',
        label: 'OAuth App Client secret',
        optional: 'false'
      },
      {
        name: 'advanced_settings',
        type: 'object',
        properties: [
          {
            name: 'oauth_scopes',
            control_type: 'multiselect',
            delimiter: ' ',
            hint: 'By default, only scopes for Reading and writing contacts are requested',
            options: [
              [ 'Read contacts', 'contacts.read' ],
              [ 'Write contacts', 'contacts.write' ],
              [ 'Read Invoices', 'invoices.read' ],
              [ 'Write Invoices', 'invoices.read' ],
            ]
          }
        ]
      }
    ],

    authorization: {
      type: 'oauth2',

      client_id: lambda do |connection|
        connection['client_id']
      end,

      client_secret: lambda do |connection|
        connection['client_secret']
      end,

      authorization_url: lambda do |connection|
        scopes = connection.dig('advanced_settings', 'oauth_scopes') || ['contacts.read', 'contacts.write'].join(" ")
        "https://api.acme.com/oauth/authorize?scopes=#{scopes}"
      end,

      token_url: lambda do |connection|
        "https://api.acme.com/oauth/token"
      end,

      apply: lambda { |connection, access_token|
        headers(Authorization: "Bearer #{access_token}")
      }
    },

    base_uri: lambda do |connection|
        "https://api.acme.com/"
    end
  },

  custom_action: true,

  custom_action_help: {
    learn_more_url: 'https://www.acme.com/api/reference',

    learn_more_text: 'Acme API documentation',

    body: 'Build your own Acme action with a HTTP request. The request will be authorized with your current connection.'
  }
}

ステップ1:コネクションの設定

認可の資格情報によってコネクションのスコープと権限が決まるため、カスタムアクションが何に使用される可能性があるかを検討することが重要です。一部のエンドポイントでは、異なるスコープと権限が必要です。 これには、デフォルトのアクションには不要な追加のスコープと権限が含まれる場合があります。

上記の例では、ユーザーが今後カスタムアクションに必要に応じて追加のOAuthスコープを追加できる、OAuth2の簡単な例を含めています。

スコープを含むOAuthコネクション

ステップ2:カスタムアクションの定義

ruby
  custom_action: true,

  custom_action_help: {
    learn_more_url: 'https://www.acme.com/api/reference',

    learn_more_text: 'Acme API documentation',

    body: 'Build your own Acme action with a HTTP request. The request will be authorized with your current connection.'
  }

このコンポーネントは、コネクターでカスタムアクションを有効にすることをWorkatoに伝えるとともに、ユーザーに追加のガイダンスを追加できるようにします。 特に、ユーザーがカスタムアクションを設定するときにリファレンスを見つけやすくなるよう、APIドキュメントへの関連するヘルプリンクを追加する必要があります。

セキュリティに関する考慮事項

カスタムアクションではURLパスへの入力を許可できるため、組織のユーザーがカスタムアクションをどのように使用するかを検討する必要があります。 パスにデータピルなどのユーザー指定入力を許可すると、パストラバーサル攻撃が可能になります。

パストラバーサル攻撃の詳細については、PortSwiggerのパストラバーサルガイドを参照してください。

次の軽減策を使用して、セキュリティ体制を強化します。

  1. 組織内で、ユーザー定義の入力(ユーザーによって書き込まれたデータを表すデータピルなど)を、URLパス入力やファイルへのパスを表すその他の入力に指定しないよう徹底します
  2. パストラバーサル攻撃に関するAPIベンダーの見解について問い合わせます。 そのような攻撃をどのように軽減しているかを理解し、ユーザー入力を機密フィールドに配置する前に、必要に応じてレシピで追加の検証を実施します。

Last updated: