Passar para o conteúdo principal

Fin Messenger: Configure a autenticação JWT para Salesforce Enhanced Chat

Como gerar JWTs para proteger o Fin Messenger para Salesforce

Este artigo explica como gerar e configurar os dois JSON Web Tokens (JWTs) necessários para o Fin Messenger autenticar users ao direcionar conversas para o Salesforce Enhanced Chat. Completar essas etapas permite que o Fin transmita com segurança a identidade do user tanto para o Intercom quanto para o Salesforce, para que seus colegas possam confiar na identidade dos clientes com quem estão falando.

Nota: Pré-requisitos: o Fin Messenger já deve estar instalado no seu app, e um Canal de Mensagens Salesforce Enhanced Chat deve estar configurado. A gem Ruby jwt é necessária se usar os exemplos de código Rails abaixo. Este recurso está disponível nos planos Fin Messenger que incluem integração com Salesforce — entre em contato com sua equipe de conta para confirmar o acesso.

Você deve adicionar ambos os JWTs aos seus atributos intercomSettings para habilitar a autenticação do Fin Messenger com o Salesforce Enhanced Chat:

  • intercom_user_jwt

    • Isso é usado para fornecer com segurança ao Fin o ID do Contato e quaisquer atributos para o Contato ou Conta que você deseja fornecer ao Fin (ou Salesforce)

  • salesforce_identity_token

    • Isso é usado para autenticar o user com o Salesforce Enhanced Chat para que seus colegas possam ter confiança de que o user é quem afirma ser.

Omitir intercom_user_jwt significa que o Fin não pode transmitir dados do contato com segurança para o Salesforce. Omitir salesforce_identity_token significa que o Salesforce não pode verificar a identidade do user, e seus colegas não poderão confirmar que o cliente é quem afirma ser.

Ambos os JWTs devem ser gerados no servidor a cada carregamento de página para o user atual, usando uma chave privada separada para cada um. Siga estas etapas para obter cada chave e habilitar a verificação do user no Fin Messenger e Salesforce:

  1. Recupere sua chave privada Intercom — vá para Configurações > Messenger > Segurança e copie seu Messenger API Secret. Esta é a chave de assinatura para intercom_user_jwt.

  2. Prepare sua chave privada Salesforce — se você já tiver uma, use a mesma chave configurada para o Salesforce Enhanced Chat. Caso contrário, gere uma chave privada e um certificado autoassinado usando OpenSSL (uma ferramenta de linha de comando para gerar chaves criptográficas), faça upload do certificado para o Salesforce e anexe-o ao seu Canal de Mensagens. Veja Salesforce: Generate an Access Token for an Authenticated User para instruções passo a passo.

  3. Habilite a Verificação do User no Salesforce — vá para Setup > Configurações de Mensagens, encontre o canal vinculado à sua Implantação de Serviço Incorporado e habilite Adicionar Verificação do User. Veja Salesforce: Token-Based User Verification Setup para instruções completas.

O exemplo a seguir em Rails mostra como gerar ambos os JWTs para autenticação do Fin Messenger e Salesforce Enhanced Chat e passá-los para seu objeto intercomSettings:

Visualização Rails — passando JWTs para intercomSettings para 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 — gerando JWTs Intercom e Salesforce para Fin Messenger:

intercom_jwt usa HS256 (HMAC-SHA256, um algoritmo de assinatura simétrico) com seu Messenger API Secret do Intercom. salesforce_jwt usa RS256 (RSA-SHA256, um algoritmo de assinatura assimétrico) com sua chave privada 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

Nota: Ambos os JWTs expiram após 1 hora (exp: Time.now.to_i + 3600). Eles devem ser regenerados a cada carregamento de página — não os armazene em cache entre sessões. Se um JWT expirar no meio da conversa, o cliente pode precisar atualizar a página para reautenticar. Verifique a configuração do seu Canal de Mensagens Salesforce para quaisquer restrições de expiração mínima ou máxima no salesforce_identity_token.

Respondeu à sua pergunta?