ハウツーガイド - OAuth 2.0クライアント認証情報による認証
OAuth 2.0クライアント認証情報フローは、従来、サーバー間認証の方法です。 これにより、ターゲットAPIサーバーと通信するWorkatoサーバーとして認証できるコネクターを構築できます。
サンプルコネクター - Percolate
{
title: 'My Percolate connector',
connection: {
fields: [
{
name: 'client_id',
optional: false,
},
{
name: 'client_secret',
control_type: 'password',
optional: false,
}
],
authorization: {
type: 'custom_auth', #Set to custom_auth
acquire: lambda do |connection|
hash = ("#{connection['client_id']}:#{connection['client_secret']}").base64.gsub("\n", '')
# Token URL
response = post('https://percolate.com/auth/v5/token/').
payload(grant_type: 'client_credentials').
headers(Authorization: "Basic " + hash).
request_format_www_form_urlencoded
{
access_token: response["access_token"],
refresh_token: response["refresh_token"]
}
end,
detect_on: [401, 403],
refresh_on: [401, 403],
apply: lambda do |connection|
headers("Authorization": "Bearer #{connection['access_token']}")
end
},
base_uri: lambda do |connection|
'https://percolate.com'
end
},
test: lambda do |connection|
get('/api/v5/me')
end,
#More connector code here
}- 完全な例については、Percolateコネクターの完全なコードを参照してください。
- Percolate APIを確認してください
ステップ1 - コネクションフィールドの定義
このコンポーネントは、コネクションを確立しようとしているユーザーに表示するフィールドをWorkatoに指示します。 Client Credentials Authenticationの場合、ユーザーがPercolateで生成したClient IDとClient Secretが必要です。
| 必要な情報 | 説明 |
|---|---|
| Client ID | これは、Workatoに関連付ける必要があるOAuthアプリの公開IDです。 これは、アプリケーションでWorkatoを検証済みアプリケーションとして登録することを意味する場合があります |
| クライアントシークレット | これは、APIがClient IDとともに検証する対応する秘密鍵です。 これは、アプリケーションでWorkatoを検証済みアプリケーションとして登録することを意味する場合があります。 client secretを他の人と共有しないでください |
これは、ハッシュの配列を受け入れるfieldsキーで実行されます。 この配列内の各ハッシュは、個別の入力フィールドに対応します。
fields: [
{
name: 'client_id',
optional: false,
},
{
name: 'client_secret',
control_type: 'password',
optional: false,
}
],
TIP
フィールドを定義するときは、少なくともnameキーを指定する必要があります。 optional、hint、control_typeなどの追加属性を使用すると、これらのフィールドの他の側面をカスタマイズできます。 Client Secretなどの機密情報には、control_typeとしてpasswordを使用してください。
Workatoでの入力フィールドの定義の詳細については、コネクションフィールドを参照してください。
ステップ2 - 認可タイプの定義
このコンポーネントは、このコネクションで使用する認証タイプをWorkatoに伝えます。 これは、authorizationオブジェクト内のtypeキーを通じて処理されます。 Client Credentials認証には、custom_authを使用する必要があります。
type: 'custom_auth'ステップ3 - アクセストークンの取得
次のステップでは、このコネクターがアクセストークンを取得するために何を行うかを定義します。 これはacquireラムダ関数で行います。
acquire: lambda do |connection|
hash = ("client:#{connection['client_id']}:#{connection['client_secret']}").base64.gsub("\n", '')
response = post('https://percolate.com/auth/v5/token/'). # Token URL
payload(grant_type: 'client_credentials').
headers(Authorization: "Basic " + hash).
request_format_www_form_urlencoded
{
access_token: response["access_token"]
}
end,acquireキーで、fieldsキーに定義された入力フィールドであるclient_idとclient_secretを渡します。 これらの値は、ラムダ関数の引数connectionを介して使用できます。 これらをヘッダーとして、BASE-64文字列エンコーディングで渡します。 リクエストの本文は、Percolateの要件に従ってrequest_format_www_form_urlencodedで送信する必要があることに注意してください。 このリクエストはその後、PercolateのトークンURLに送信されます。
リクエストを受信すると、APIはJSONレスポンスを返します。
{
"access_token": "my-authentication-token",
"token_type": "bearer",
"expires_in": "seconds-until-expiration",
"error": "optional-error-message"
}acquireラムダ関数の出力は、元のコネクションオブジェクトにマージされるオブジェクトであることが期待されます。 例:
# Original Connection hash
{
client_id: "abcd1234",
client_secret: "secretClientSecret"
}
# After acquire key is executed
{
client_id: "abcd1234",
client_secret: "secretClientSecret",
access_token: "my-authentication-token"
}ステップ4 - 後続のHTTPリクエストへのアクセストークンの適用
次に、Percolateから取得したアクセストークンを利用する方法をWorkatoに指示する必要があります。 これはapplyキーで行い、現在connection引数に保存されているアクセストークンを参照できます。 applyキーに指定した指示は、コネクションが確立された後、このコネクターが送信するすべてのHTTPリクエストに適用されます。
apply: lambda do |connection|
headers("Authorization": "Bearer #{connection['access_token']}")
endこの例では、任意のリクエストのヘッダーに追加されるアクセストークン(connection['access_token'])を定義しています。 送信される各HTTPリクエストのヘッダーには、XXXがconnectionハッシュに保存されたアクセストークンであるAuthorization: Bearer XXXが含まれます。
ステップ5 - トークン更新動作の定義
APIが所定の時間後にアクセストークンを期限切れにする状況があります。 このような場合、OAuthサーバーから新しいaccess_tokenをいつ取得するかをWorkatoに知らせるために、refresh_onシグナルを定義する必要があります。 refresh_onは、HTTPレスポンスコードまたは正規表現文字列を含む配列を受け入れます。
コネクター内のHTTPリクエストがHTTPレスポンスコードのいずれかを受信すると、新しいアクセストークンの取得を試みます。 同様に、本文ペイロードの内容が定義済みの正規表現文字列のいずれかに一致すると、新しいアクセストークンを取得します。
type: custom_authを使用する例では、acquireキーのコードを実行します。
refresh_on: [401, 403],acquireラムダが再度実行されると、これはPercolateから期待されるレスポンスです。
{
"access_token": "my-NEW-authentication-token",
"token_type": "bearer",
"expires_in": "seconds-until-expiration",
"error": "optional-error-message"
}acquire lambda関数の想定される出力は、元のコネクションハッシュにマージされるハッシュです。 例:
# Original Connection hash
{
client_id: "abcd1234",
client_secret: "secretClientSecret",
access_token: "my-authentication-token"
}
# After acquire lambda is executed
{
client_id: "abcd1234",
client_secret: "secretClientSecret",
access_token: "my-NEW-authentication-token"
}ステップ6 - APIのベースURIの設定
このコンポーネントは、APIのベースURLをWorkatoに指示します。 このキーは任意ですが、HTTPリクエストを定義する際に、コネクターの残りの部分で相対パスのみを指定できるようになります。 base_uriの設定の詳細については、ベースURI設定を参照してください。
base_uri: lambda do |connection|
'https://percolate.com'
endTIP
このラムダ関数はconnection引数にもアクセスできます。 これは、ユーザーのインスタンスに基づいてAPIのベースURIが変わる可能性がある場合に特に便利です。 connection引数には次の形式でアクセスできます。
base_uri: lambda do |connection|
"https://#{connection['domain'].com/api}"
endステップ7 - コネクションのテスト
エンドユーザーから収集する必要があるフィールドと、それらのフィールドからの入力をどう処理するかを定義したので、次にこのコネクションをテストする方法が必要です。 これはtestキーで処理されます。
test: lambda do
get('/api/v5/me')
end,このブロックでは、受け取ったばかりの新しい認証情報を使用してサンプルリクエストを送信できるエンドポイントを指定する必要があります。 200 OK HTTPレスポンスを受信すると、コネクションをSuccessfulとして表示します。 上記の例では、/api/v5/meエンドポイントにGETリクエストを送信し、APIキーが有効な場合は200レスポンスを期待しています。
コネクションSDKリファレンス
connectionキー内で使用可能なキーとそのパラメーターに慣れるには、SDKリファレンスを確認してください。
Last updated: