メインコンテンツにスキップ

Fin Messenger:Salesforce Enhanced ChatのJWT認証を設定する

Fin Messenger for Salesforceを保護するためのJWT生成方法

この記事では、Fin MessengerがSalesforce Enhanced Chatに会話をルーティングする際にusersを認証するために必要な2つのJSON Web Tokens(JWTs)の生成と設定方法を説明します。これらの手順を完了すると、FinはusersのIDをIntercomとSalesforceの両方に安全に渡せるため、チームメンバーは顧客の身元を信頼して会話できます。

注意:前提条件:Fin Messengerはすでにアプリにインストールされており、Salesforce Enhanced Chat Messaging Channelが設定されている必要があります。以下のRailsコード例を使用する場合はRuby jwt gemが必要です。この機能はSalesforce統合を含むFin Messengerプランで利用可能です。アクセス確認はアカウントチームにお問い合わせください。

Fin MessengerのSalesforce Enhanced Chat認証を有効にするには、両方のJWTsをintercomSettings属性に追加する必要があります:

  • intercom_user_jwt

    • これはFinにContact IDおよびContactまたはAccountに関する提供したい属性を安全に提供するために使用されます(FinまたはSalesforce向け)。

  • salesforce_identity_token

    • これはusersをSalesforce Enhanced Chatで認証するために使用され、チームメンバーがusersが本人であることを確信できるようにします。

intercom_user_jwtを省略すると、Finは連絡先データをSalesforceに安全に渡せません。salesforce_identity_tokenを省略すると、Salesforceはusersの身元を確認できず、チームメンバーは顧客が本人であることを確認できません。

両方のJWTsは、現在のusersごとに各ページ読み込み時にサーバー側で生成し、それぞれ別の秘密鍵を使用する必要があります。各鍵を取得し、Fin MessengerとSalesforceでusersの検証を有効にする手順は以下の通りです:

  1. Intercomの秘密鍵を取得するには、Settings > Messenger > Securityに移動し、Messenger API Secretをコピーします。これはintercom_user_jwtの署名鍵です。

  2. Salesforceの秘密鍵を準備します。すでにお持ちの場合は、Salesforce Enhanced Chatに設定されている同じ鍵を使用してください。ない場合は、OpenSSL(暗号鍵生成のコマンドラインツール)を使って秘密鍵と自己署名証明書を生成し、証明書をSalesforceにアップロードしてMessaging Channelに添付します。手順はSalesforce: Generate an Access Token for an Authenticated Userを参照してください。

  3. Salesforceでusers検証を有効にするには、Setup > Messaging Settingsに移動し、Embedded Service Deploymentにリンクされたチャネルを見つけてAdd User Verificationを有効にします。詳細はSalesforce: Token-Based User Verification Setupを参照してください。

以下のRails例は、Fin MessengerとSalesforce Enhanced Chat認証用の両方のJWTsを生成し、intercomSettingsオブジェクトに渡す方法を示しています:

Railsビュー — Fin Messenger用のJWTsをintercomSettingsに渡す:

  window.intercomSettings = {
api_base: "https://api-iam.intercom.io",
app_id: "your-app-id-here",
user_id: "<%= current_user&.id %>",
intercom_user_jwt: "<%= intercom_jwt(current_user&.id %>",
salesforce_identity_token: "<%= salesforce_jwt(current_user&.id) %>"
};

Railsヘルパー — Fin Messenger用のIntercomとSalesforce JWTsを生成する:

intercom_jwtはHS256(HMAC-SHA256、対称署名アルゴリズム)を使用し、Intercom Messenger API Secretで署名します。salesforce_jwtはRS256(RSA-SHA256、非対称署名アルゴリズム)を使用し、Salesforceの秘密鍵で署名します。

  def intercom_jwt(user_id)
JWT.encode({ user_id: user_id, exp: Time.now.to_i+3600 }, INTERCOM_JWT_SECRET, "HS256")
end

def salesforce_jwt(contact_id)

# JWT payload
payload = {
iss: "intercom.com", # Set to whatever is set as Issuer in SF Enhanced Chat User Verification settings
sub: contact_id,
aud: "https://your-salesforce-subdomain-here.my.salesforce-scrt.com",
exp: Time.now.to_i + 3600, # expires in 1 hour
iat: Time.now.to_i
}

# JWT headers
headers = {
alg: "RS256",
typ: "JWT",
kid: "WebAppKey1" # Your key id here
}

JWT.encode(payload, OpenSSL::PKey::RSA.new(SF_PRIVATE_KEY), "RS256", headers)
end

注意:両方のJWTsは1時間後に期限切れになります(exp: Time.now.to_i + 3600)。各ページ読み込み時に再生成する必要があり、セッション間でキャッシュしないでください。JWTが会話中に期限切れになると、顧客は再認証のためにページを更新する必要がある場合があります。salesforce_identity_tokenの最小または最大有効期限制限についてはSalesforce Messaging Channelの設定を確認してください。

こちらの回答で解決しましたか?