ハウツーガイド - OAuth 2.0リソース所有者パスワード資格情報認証

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

OAuth 2.0リソース所有者パスワード資格情報フローは、従来、サーバー間の認証方法です。 これにより、Workatoサーバーとして認証し、ターゲットAPIサーバーと通信できるコネクターを構築できます。 このフローでは、ユーザーのユーザー名とパスワードをアクセストークン、および必要に応じてリフレッシュトークンと交換できます。

サンプルコネクター - Microsoft Entra ID

ruby
{
  title: 'My Azure connector',

  connection: {
    fields: [
      {
        name: 'tenant_id',
        optional: false,
      }
      {
        name: 'client_id',
        optional: false,
      },
      {
        name: 'client_secret',
        control_type: 'password',
        optional: false,
      },
      {
        name: 'username',
        optional: false,
      },
      {
        name: 'password',
        control_type: 'password',
        optional: false,
      }
    ],

    authorization: {
      type: 'custom_auth', #Set to custom_auth

      acquire: lambda do |connection|
        token_url = "https://login.microsoftonline.com/#{connection['tenant_id']}/oauth2/v2.0/token"
        response = post(token_url).
                    payload(client_id: "#{connection['client_id']}",
                      client_secret: "#{connection['client_secret']}",
                      username: "#{connection['username']}",
                      password: "#{connection['password']}",
                      grant_type: "password").
                    request_format_www_form_urlencoded


        {
          access_token: response["access_token"],
        }
      end,

      refresh_on: 401,

      apply: lambda do |connection|
        headers("Authorization": "Bearer #{connection['access_token']}")
      end
    }

  },

  test: lambda do |connection|
    get( #Some accessible endpoint )
  end,

  #More connector code here
}

ステップ1 - コネクションフィールドの定義

このコンポーネントは、コネクションを確立しようとしているユーザーに表示するフィールドをWorkatoに指示します。 リソース所有者パスワード資格情報の場合、ユーザーがAzureで生成したClient IDとClient Secretが必要です。 また、コネクションを承認するために使用するユーザーアカウントのユーザー名とパスワードも指定する必要があります。

必要な情報説明
Client IDこれは、Workatoに関連付ける必要があるOAuthアプリの公開IDです。 これは、アプリケーションでWorkatoを検証済みアプリケーションとして登録することを意味する場合があります
クライアントシークレットこれは、APIがClient IDとともに検証する対応する秘密鍵です。 これは、アプリケーションでWorkatoを検証済みアプリケーションとして登録することを意味する場合があります。 client secretを他の人と共有しないでください
ユーザー名これは、クライアントの認証権限を付与するユーザーアカウントのユーザー名です。
パスワードこれは、クライアントの認証権限を付与するユーザーアカウントのパスワードです。

これは、ハッシュの配列を受け入れるfieldsキーで実行されます。 この配列内の各ハッシュは、個別の入力フィールドに対応します。

ruby
    fields: [
      {
        name: 'tenant_id',
        optional: false,
      }
      {
        name: 'client_id',
        optional: false,
      },
      {
        name: 'client_secret',
        control_type: 'password',
        optional: false,
      },
      {
        name: 'username',
        optional: false,
      },
      {
        name: 'password',
        control_type: 'password',
        optional: false,
      }
    ],

構成済みAzureコネクションフィールド

TIP

フィールドを定義するときは、少なくともnameキーを指定する必要があります。 optionalhintcontrol_typeなどの追加属性を使用すると、これらのフィールドの他の側面をカスタマイズできます。 Client Secretなどの機密情報には、control_typeとしてpasswordを使用してください。

Workatoでの入力フィールドの定義の詳細については、コネクションフィールドを参照してください。

ステップ2 - 認可タイプの定義

このコンポーネントは、このコネクションで使用する認証タイプをWorkatoに伝えます。 これは、authorizationオブジェクト内のtypeキーを通じて処理されます。 Client Credentials認証には、custom_authを使用する必要があります。

ruby
      type: 'custom_auth'

ステップ3 - アクセストークンの取得

acquireキーでは、コネクターのユーザーが指定したclient_idclient_secretusernamepasswordをペイロードとして渡します。 リクエストのペイロードはrequest_format_www_form_urlencodedで送信する必要がある点に注意してください。 また、passwordを付与タイプとして識別し、これをPOSTリクエストのペイロードとして渡します。 このリクエストはその後、MicrosoftのトークンURLに送信されます。

ruby
    acquire: lambda do |connection|
      response = post("https://login.microsoftonline.com/#{connection['tenant_id']}/oauth2/v2.0/token"). # Token URL
                    payload(client_id: "#{connection['client_id']}",
                      client_secret: "#{connection['client_secret']}",
                      username: "#{connection['username']}",
                      password: "#{connection['password']}",
                      grant_type: "password").
                    request_format_www_form_urlencoded

      {
        access_token: response["access_token"],
      }
    end,

リクエストを受信すると、APIはJSONレスポンスを返します。

json
{
  "access_token": "my-authentication-token",
  "token_type": "bearer",
  "expires_in": "seconds-until-expiration",
  "error": "optional-error-message"
}

acquire lambda関数の想定される出力は、元のコネクションハッシュにマージされるハッシュです。 例:

ruby
# Original Connection hash
{
  client_id: "abcd1234",
  client_secret: "secretClientSecret"
}

# After acquire block is executed
{
  client_id: "abcd1234",
  client_secret: "secretClientSecret",
  access_token: "my-authentication-token"
}

ステップ4 - 後続のHTTPリクエストへのアクセストークンの適用

次に、Microsoftから取得したアクセストークンをどのように使用するかをWorkatoに伝える必要があります。 これはapplyキーで行い、現在connection引数に保存されているアクセストークンを参照できます。 applyブロックで導入した命令は、コネクションが確立された後にこのコネクターが送信するすべてのHTTPリクエストに適用されます。

ruby
    apply: lambda do |connection|
      headers("Authorization": "Bearer #{connection['access_token']}")
    end

この例では、任意のリクエストのヘッダーに追加されるアクセストークン(connection['access_token'])を定義しています。 送信される各HTTPリクエストのヘッダーには、XXXconnectionハッシュに保存されたアクセストークンであるAuthorization: Bearer XXXが含まれます。

ステップ5 - APIのbase URIの設定

このコンポーネントは、APIのベースURLをWorkatoに指示します。 このキーは任意ですが、HTTPリクエストを定義する際に、コネクターの残りの部分で相対パスのみを指定できるようになります。 base_uriの設定の詳細については、ベースURI設定を参照してください。

TIP

このラムダ関数はconnection引数にもアクセスできます。 これは、ユーザーのインスタンスに基づいてAPIのベースURIが変わる可能性がある場合に特に便利です。 connection引数には次の形式でアクセスできます。

ruby
    base_uri: lambda do |connection|
      #some code here
    end

ステップ6 - コネクションのテスト

エンドユーザーから収集する必要があるフィールドと、それらのフィールドからの入力をどう処理するかを定義したので、次にこのコネクションをテストする方法が必要です。 これはtestキーで処理されます。

ruby
    test: lambda do
      get(# Some accessible code)
    end,

このキーでは、受け取ったばかりの新しい認証情報を使用してサンプルリクエストを送信できるエンドポイントを指定する必要があります。 200 OK HTTPレスポンスを受信すると、コネクションをSuccessfulとして表示します。

コネクションSDKリファレンス

connectionキー内で使用可能なキーとそのパラメーターに慣れるには、SDKリファレンスを確認してください。

Last updated: