Passer au contenu principal

Fin Messenger : Configurer l'authentification JWT pour Salesforce Enhanced Chat

Comment générer des JWT pour sécuriser Fin Messenger pour Salesforce

Cet article explique comment générer et configurer les deux JSON Web Tokens (JWTs) requis pour que Fin Messenger authentifie les users lors du routage des conversations vers Salesforce Enhanced Chat. Ces étapes permettent à Fin de transmettre en toute sécurité l'identité des users à la fois à Intercom et Salesforce, afin que vos coéquipiers puissent faire confiance à l'identité des clients avec lesquels ils communiquent.

Note : Prérequis : Fin Messenger doit déjà être installé dans votre application, et un canal de messagerie Salesforce Enhanced Chat doit être configuré. La gem Ruby jwt est requise si vous utilisez les exemples de code Rails ci-dessous. Cette fonctionnalité est disponible sur les plans Fin Messenger incluant l'intégration Salesforce — contactez votre équipe de compte pour confirmer l'accès.

Vous devez ajouter les deux JWTs à vos attributs intercomSettings pour activer l'authentification Fin Messenger avec Salesforce Enhanced Chat :

  • intercom_user_jwt

    • Cela sert à fournir en toute sécurité à Fin l'ID Contact et tous les attributs du Contact ou du Compte que vous souhaitez fournir à Fin (ou Salesforce)

  • salesforce_identity_token

    • Cela sert à authentifier le user avec Salesforce Enhanced Chat afin que vos coéquipiers puissent être sûrs que le user est bien celui qu'il prétend être.

Omettre intercom_user_jwt signifie que Fin ne peut pas transmettre en toute sécurité les données du contact à Salesforce. Omettre salesforce_identity_token signifie que Salesforce ne peut pas vérifier l'identité du user, et vos coéquipiers ne pourront pas confirmer que le client est bien celui qu'il prétend être.

Les deux JWTs doivent être générés côté serveur à chaque chargement de page pour le user actuel, en utilisant une clé privée distincte pour chacun. Suivez ces étapes pour obtenir chaque clé et activer la vérification des users dans Fin Messenger et Salesforce :

  1. Récupérez votre clé privée Intercom — allez dans Paramètres > Messenger > Sécurité et copiez votre Messenger API Secret. C'est la clé de signature pour intercom_user_jwt.

  2. Préparez votre clé privée Salesforce — si vous en avez déjà une, utilisez la même clé configurée pour Salesforce Enhanced Chat. Sinon, générez une clé privée et un certificat auto-signé avec OpenSSL (un outil en ligne de commande pour générer des clés cryptographiques), téléchargez le certificat sur Salesforce, et attachez-le à votre canal de messagerie. Voir Salesforce : Générer un jeton d'accès pour un user authentifié pour les instructions étape par étape.

  3. Activez la vérification des users dans Salesforce — allez dans Configuration > Paramètres de messagerie, trouvez le canal lié à votre déploiement Embedded Service, et activez Ajouter la vérification des users. Voir Salesforce : Configuration de la vérification des users basée sur un jeton pour les instructions complètes.

L'exemple Rails suivant montre comment générer les deux JWTs pour l'authentification Fin Messenger et Salesforce Enhanced Chat et les passer dans votre objet intercomSettings :

Vue Rails — passage des JWTs dans intercomSettings pour Fin Messenger :

  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) %>"
};

Helpers Rails — génération des JWTs Intercom et Salesforce pour Fin Messenger :

intercom_jwt utilise HS256 (HMAC-SHA256, un algorithme de signature symétrique) avec votre Messenger API Secret Intercom. salesforce_jwt utilise RS256 (RSA-SHA256, un algorithme de signature asymétrique) avec votre clé privée 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

Note : Les deux JWTs expirent après 1 heure (exp : Time.now.to_i + 3600). Ils doivent être régénérés à chaque chargement de page — ne les mettez pas en cache entre les sessions. Si un JWT expire en cours de conversation, le client peut devoir rafraîchir la page pour se réauthentifier. Vérifiez la configuration de votre canal de messagerie Salesforce pour toute contrainte d'expiration minimale ou maximale sur salesforce_identity_token.

Avez-vous trouvé la réponse à votre question ?