Suite | Qualquer plano |
Quando você fornece suporte por conversa, os usuários podem tentar manter uma conversa em vários dispositivos e canais. Ao autenticar os usuários finais, você pode garantir que todos os pontos de contato sejam associados ao usuário final correto. Isso pode melhorar a qualidade do suporte oferecido pelos agentes e aumentar a segurança de informações sensíveis que podem surgir enquanto os agentes ajudam os usuários finais.
- Terminologia para a autenticação em mensagens
- Visão geral da implementação de autenticação em mensagens para usuários finais
- Criação e compartilhamento de uma chave de assinatura
- Autenticação de usuários finais com somente um ID externo
- Incorporação de identidades de e-mail na autenticação do usuário
- Resolução de conflitos entre IDs externos e e-mails nos JWTs
Artigo relacionado: Noções básicas sobre a autenticação do usuário para mensagens.
Terminologia para a autenticação em mensagens
- JWT: a Zendesk usa tokens da web JSON (JWTs) para a autenticação de usuários finais em mensagens. Esses tokens contêm detalhes que confirmam a identidade de um usuário final. Para obter mais informações sobre JWT, consulte jwt.io.
- Chave de assinatura: uma chave de assinatura é criada por um administrador do Zendesk na Central de administração e compartilhada com um desenvolvedor da equipe, que a utiliza para assinar o JWT quando necessário.
- ID externo: uma cadeia de caracteres alfanumérica, como um ID de um sistema externo, exclusiva para cada usuário. Essa é a identificação principal para autenticação de mensagens, mesmo quando um endereço de e-mail é incluído no JWT.
- Nome de usuário: (opcional) o nome do usuário final associado ao ID externo ou endereço de e-mail. Se você inclui o nome do usuário no JWT, ele aparece no Espaço de trabalho do agente. Essa informação pode ajudar os agentes nas comunicações com os usuários finais.
- E-mail: (opcional) o endereço de e-mail exclusivo associado a um usuário final.
Visão geral da implementação de autenticação em mensagens para usuários finais
O Zendesk usa Tokens da web JSON (JWTs) para autenticar usuários finais de mensagens, o que fornece uma maneira flexível e sem estado de verificar identidades de usuários e proteger pontos de extremidade da API.
- O processo de autenticação em mensagens começa com um administrador gerando uma chave de assinatura e fornecendo-a a um desenvolvedor. Em seguida, o desenvolvedor usa a chave de assinatura para implementar um serviço de back-end que pode criar JWTs assinados para os usuários conforme solicitado.
- Quando solicitado, o serviço de back-end cria e retorna JWTs assinados para seu website ou aplicativo móvel. Os JWTs criados por esse serviço precisam incluir um ID externo exclusivo e, opcionalmente, um endereço de e-mail para identificar o usuário final.
- Sempre que o usuário se conecta, seu website ou aplicativo precisa chamar uma API de acesso equivalente disponível para SDKs para dispositivos móveis e Web Widget, momento em que o JWT é passado ao Zendesk para verificar a identidade informada pelo usuário.
Para obter mais informações, especialmente para os desenvolvedores da sua equipe, consulte Enabling authenticated visitors for messaging with Zendesk SDKs ou assista ao vídeo a seguir:
Authenticating end users in web messaging (17:22) (em inglês)
Criação e compartilhamento de uma chave de assinatura
As chaves de assinatura são usadas por desenvolvedores para criar JWTs para usuários finais. É necessário ser um administrador para criar uma chave de assinatura. Você pode criar, no máximo, 10 chaves. Se você tentar criar uma nova chave após atingir o limite de 10, será solicitado que apague as chaves não utilizadas.
- Na Central de administração, clique em
Conta na barra lateral e selecione Segurança > Autenticação de usuário final.
- Clique na aba Mensagens e em Criar chave.
Se você está criando sua primeira chave, Criar chave aparece no final da página. Do contrário, a opção aparece no canto direito superior.
- Insira um Nome para a chave e clique em Avançar.
- Quando solicitado, clique em Copiar para copiar o segredo compartilhado.
A chave é salva e um ID é atribuído automaticamente. Você pode encontrar o ID de uma chave na lista de chaves na aba Mensagens da página Autenticação de usuário final.
- De maneira confidencial, envie para o desenvolvedor o ID da chave e o segredo compartilhado que você copiou.
- Clique em Ocultar chave permanentemente.
Autenticação de usuários finais com somente um ID externo
Para autenticar um usuário final, forneça um ID externo nos JWTs que você emite para os usuários. O Zendesk usa o ID externo fornecido em um JWT como o identificador principal para autenticação do usuário para mensagens. Ao executar a autenticação do usuário, o Zendesk primeiro resolve um usuário existente com o ID externo. Se um endereço de e-mail for incluído no JWT, ele será usado para resolver a identidade do usuário somente quando nenhum usuário existente corresponder ao ID externo.
Assinatura de JWTs somente com um ID externo
- external_id: (obrigatório) é a cadeia de caracteres alfanumérica exclusiva que pode ser usada para identificar cada usuário. Consulte Seleção do ID externo a ser usado em JWTs emitidos para usuários.
-
scope: (obrigatório) o escopo de acesso do chamador. O único valor válido é
user
. - name: (opcional) o nome do usuário. A inclusão do nome na carga do JWT permite que o Zendesk exiba o nome do usuário no Espaço de trabalho do agente e ajuda os agentes a fornecerem um suporte mais personalizado.
{
"external_id": "12345678",
"scope": "user",
"name": "Jane Soap"
}
Seleção do ID externo a ser usado em JWTs emitidos para usuários
- Um ID externo deve ser uma cadeia de caracteres alfanumérica.
- IDs externos podem ter no máximo 255 caracteres.
- O ID externo de cada usuário deve ser globalmente exclusivo no nível da conta.
Se sua conta tem várias marcas, os IDs externos devem ser exclusivos em todas as marcas.
- O ID externo de um usuário nunca deve mudar.
- Um usuário pode ter apenas um ID externo atribuído a ele.
Alguns exemplos de boas escolhas de IDs externos incluem: um ID incrementado ou aleatório atribuído no contato inicial (exemplo: usr_12345) ou, para várias marcas, um identificador específico da marca combinado com um ID incrementado ou aleatório atribuído (exemplo: brand1_a8dedg).
Evite usar o endereço de e-mail e o número de telefone do usuário, pois essas informações podem mudar com o tempo e os usuários podem ter vários e-mails e números de telefones. Evite também o nome do usuário, pois ele pode não ser único.
Incorporação de identidades de e-mail na autenticação do usuário
- Os usuários autenticados têm a autenticação feita por JWTs assinados.
O uso de JWTs proporciona uma abordagem confiável porque o conteúdo de um JWT assinado não pode ser adulterado por usuários finais. Se você se preocupa com ataques de falsidade ideológica, deve restringir as identidades de e-mail para usuários finais autenticados. Essa é a opção mais segura e a configuração padrão para novas contas do Zendesk.
- Os usuários não autenticados são usuários finais que fornecem um endereço de e-mail em resposta a uma solicitação de um bot do Zendesk.
Permitir o uso de identidades de e-mail para usuários não autenticados pode deixar você vulnerável a pessoas que fingem ser outros usuários fornecendo um endereço de e-mail que não é delas.
O fluxograma a seguir demonstra como as identidades de e-mail podem ser usadas na autenticação de mensagens:
Configuração de identidades de e-mail
Com o Web Widget ou aplicativos móveis, os usuários podem fornecer o próprio endereço de e-mail em resposta a um formulário ou uma solicitação de agente de IA. Nesses cenários, não há nada que impeça um usuário mal-intencionado de fornecer o endereço de e-mail de outra pessoa na tentativa de se passar por ela. No entanto, usar JWTs para autenticar usuários com IDs externos e identidades de e-mail é uma maneira mais confiável de atribuir endereços de e-mail aos usuários.
Dependendo das suas configurações, os agentes poderão ver endereços de e-mail coletados por formulário e fornecidos pelo JWT nos perfis de usuário. Em novas contas do Zendesk, as identidades de e-mail são ativadas e configuradas para usar apenas endereços de e-mail verificados. Essa é a opção mais segura. Contas mais antigas são configuradas para usar endereços de e-mail verificados e não verificados.
- Na Central de administração, clique em
Canais na barra lateral e selecione Mensagens e redes sociais > Mensagens.
- Clique em Gerenciar configurações.
- Clique em Identidades de e-mail e selecione uma das seguintes opções:
- Usar apenas e-mails verificados: (padrão) as identidades de e-mail são criadas apenas para usuários autenticados e que tenham um endereço de e-mail verificado incluído com o JWT emitido.
- Usar e-mails verificados e não verificados: além das identidades de e-mail de usuários autenticados com endereços de e-mail verificados serem visíveis nos perfis de usuário, os endereços de e-mail não verificados fornecidos pelos usuários por meio de fluxos de agentes de IA também são adicionados ao perfil do usuário.
- (Não recomendado) Se você quer que qualquer usuário, mesmo os não autenticados, sejam capazes de reivindicar endereços de e-mail verificados, selecione O usuário não autenticado pode reivindicar e-mails verificados.
- Clique em Salvar configurações.
Uso apenas de e-mails verificados
as identidades de e-mail são criadas somente para usuários que estejam autenticados e tenham um endereço de e-mail verificado incluído com o JWT emitido.
Com essa opção, os agentes veem o endereço de e-mail fornecido pelos usuários finais não autenticados no histórico da conversa, mas não veem uma identidade de e-mail vinculada ao usuário. Se um agente precisa fazer o acompanhamento com um usuário não autenticado por e-mail, precisa adicionar manualmente a identidade de e-mail ao registro do usuário.
Uso de e-mails verificados e não verificados
além das identidades de e-mail de usuários autenticados com endereços de e-mail verificados serem visíveis nos perfis de usuário, os endereços de e-mail não verificados fornecidos pelos usuários por meio de fluxos de agentes de IA também são adicionados ao perfil do usuário.
Essa opção é menos segura porque usuários mal-intencionados ainda podem tentar executar ataques de falsidade ideológica. No entanto, os agentes podem inspecionar os perfis dos usuários para determinar se um endereço de e-mail é verificado. Endereços de e-mail não verificados são claramente marcados no Espaço de trabalho do agente. Quando os agentes precisam enviar e-mails de acompanhamento, eles podem ser instruídos a verificar os usuários finais com perguntas de segurança para aumentar a confiança de que o usuário final é quem ele diz ser.
Ordem dos eventos | Evento | Identidade de e-mail resultante |
---|---|---|
1 | Um usuário não autenticado fornece um e-mail coletado por formulário. Por exemplo, alice@exemplo.org | O Zendesk cria um novo usuário não autenticado (id: 12345) com a identidade de e-mail não verificada (alice@exemplo.org). |
2 | Um usuário autenticado recebe um JWT com as seguintes declarações:
|
O Zendesk cria um novo usuário autenticado (id: 22345) com uma identidade de e-mail verificada (alice@exemplo.org). O usuário não autenticado (id: 12345) perde sua identidade de e-mail não verificada porque ela foi sobreposta por uma identidade verificada. |
Permitir que usuários não autenticados reivindiquem e-mail verificados (não recomendado)
Ao contrário das outras opções de identidade de e-mail, esta configuração permite que os usuários assumam a identidade de usuários autenticados apenas fornecendo o endereço de e-mail do usuário quando solicitado. Quando selecionada, os e-mails verificados não se sobrepõem aos e-mails não verificados.
Essa opção é a menos segura e mais suscetível a ataques de falsidade ideológica. No entanto, agentes diligentes ainda podem detectar possíveis impostores nesse cenário, procurando pelo ícone de marca de seleção verde no perfil do usuário e ao lado das mensagens deles, o que indica se o usuário é autenticado.
Quando você seleciona essa opção, o estado de verificação das identidades de e-mail coletadas dos canais de mensagens não é mais confiável, pois um impostor pode surgir após a autenticação do usuário e assumir a posse do status de e-mail em uma interação por mensagens posterior. Isso significa que os ataques de falsidade ideológica têm mais probabilidade de sucesso e os agentes têm meios limitados de saber se o usuário final é quem diz ser. No entanto, as identidades de e-mail verificadas ainda se sobrepõem às identidades de e-mail não verificadas, e a identidade de e-mail é removida do registro de usuário do impostor.
Emissão de JWTs com endereços de e-mail
- external_id: (obrigatório) é a cadeia de caracteres alfanumérica exclusiva que pode ser usada para identificar cada usuário. Consulte Seleção do ID externo a ser usado em JWTs emitidos para usuários.
-
scope: (obrigatório) o escopo de acesso do chamador. O único valor válido é
user
. - name: (opcional) o nome do usuário. A inclusão do nome na carga do JWT permite que o Zendesk exiba o nome do usuário no Espaço de trabalho do agente e ajuda os agentes a fornecerem um suporte mais personalizado.
-
email: (obrigatório) o endereço de e-mail do usuário sendo conectado. Precisa ser exclusivo do usuário.
Defina o endereço de e-mail como o endereço de e-mail principal do usuário no Espaço de trabalho do agente. Os JWTs não têm suporte para a inclusão de endereços de e-mail secundários.
-
email_verified: (opcional) se o usuário final em questão comprovou que o endereço de e-mail é dele. Se você quer que usuários finais tenham identidades de e-mail verificadas, os JWTs emitidos devem conter as declarações
email
e"email_verified": true
.
{
"external_id": "12345678",
"email": "janes@soap.com",
"email_verified": true,
"name": "Jane Soap",
"scope": "user"
}
Resolução de conflitos entre IDs externos e e-mails nos JWTs
O Zendesk usa o ID externo como o identificador principal, com os endereços de e-mail sendo usados somente se nenhuma correspondência for encontrada para o ID externo.
É melhor implementar a autenticação de mensagens para evitar conflitos. Por exemplo, escolha seus IDs externos e configurações de e-mail no Zendesk para garantir que não entrem em conflito. Se, no entanto, o endereço de e-mail apresentado em um JWT já está associado a um ID externo diferente, o Zendesk rejeita o JWT e a tentativa de acesso do usuário final falha. Quando isso acontece, a conversa começa com o usuário em um estado não autenticado.
- Atualize o JWT para usar outro valor de
external_id
ou endereço deemail
.OU
- Apague o usuário com o
external_id
conflitante, liberando-o para ser usado por um usuário final diferente. Consulte Exclusão de usuário na API do Sunshine Conversations.
167 comentários
Ivan Genchev
Hello Everyone,
I would like to share our experience with authenticating users and the disappointment following.
We are supporting tens of brands and authenticating users who log in in our websites and open a chat (messaging) via the widget. Each of our brands has a unique set of numbers as External ID. Users can register in any of our brands with the same email and they will be generated a different External ID for each Brand. This information is provided to Zendesk and a user is created in Support.
Sounds simple enough, however, once a user registers in more than 1 of our brands, they are forbidden by Zendesk to initiate a chat in the 2nd, 3rd, or any other brand after the first registration. This is due to the 409 error. The “solution” in the article is to manually or via API, remove the original user so that they can be registered anew and open a chat in the new brand, but this does not help as this would need to happen each time the user tries to open a chat in the original brand or in a new one.
For some reason, Sunshine Conversations cannot comprehend the same Email, being related to more than one External ID (or, since the External ID is the main identifier, more than 1 External ID cannot be related to the same Email). Which could make sense in some cases, but not for a platform that offers Multi-Brand usage.
“Solution” 1: To not pass our external IDs as External_ID, but pass the email as an External_ID. In this case, no matter where the user registers/logins, we will pass the same External_ID to Zendesk and there will be no conflict. Sounds good, the first registration is successful. The second registration (to a 2nd Brand) is also successful. However, users can view the history of the first brand in the chat of the second brand. This is absolutely baffling. Why would this even be a feature, why would a user need the history of Brand1 in the chat of Brand2? This can be a huge breach of trust in the customer. The answer to this question is that Sunshine Conversations just works like that..
“Solution” 2: What we are currently doing: Authenticate users as usual, and create a fallback for when a user encounters the 409 error (registered in more than 1 brand and initiates a chat). The fallback authenticates the user with the External ID, however instead of using the same Email, it creates a new email for them which looks like this: External_ID+Email (ex. 123456789+example@email.com). This is made so that each new registration in another brand will have a different email, so that Zendesk can allow them to be registered anew, instead of blocking them.
- So now if 1 user, with the email example@email.com registers in 3 Brands, he will have 3 separate users in Zendesk:
One as example@email.com , Second as 123456789+example@email.com and Third as 987654321+example@email.com .
- Great, at least they can initiate chats now. The issue? Only the original user can be used for email communication, as he is the only one with an actually legit email. So any email sent from/to Brand2 and Brand3 will go to the user for Brand1. Any chat communication will be saved in the interaction history for the respective user, but emails will never be seen as they should.
- So if the user comes in Brand3 and says “check the email communication”, you cannot simply view the Interaction History, you have to open an entirely separate user and check the email communication there.
- Sometimes, the original email example@email.com and an email such as 123456789+example@email.com will be added to the same user. In many of these cases, the 123456789+example@email.com is marked as Primary in the user's Zendesk profile. For another unknown reason, Zendesk does not allow us to send emails to the Secondary email, and it is only used for identification. So even if you type out example@email.com in the “Requester field”, it will recognize the user and automatically change the Requester to the primary email 123456789+example@email.com . This is obviously a non-existent email, so the sending will fail.
The only solution to this is to go inside the profile of the user, mark the example@email.com as verified and then change it to primary. Only then can an agent send an email to this customer.
The other “Solution” would be to not authenticate users at all but you can imagine how that is not exactly a solution.
After thorough communication with Zendesk Support, it seems this is our only workaround which includes all these pain points that force agents to do unnecessary manual work.
To us this seems as a major flaw for a platform that support multiple brands and I believe a solution to this should be of highest priority. At this point, the platform is basically punishing the customer for having a registration in more than 1 brand with the same email, and any workaround feels unpolished and irritating to agents for the manual steps they need to take.
I look forward to any feedback or other possible solutions that you may offer.
Thank you.
0
Anthony Plaza
Hello everyone, specific question.
Was the email authentication issue resolved?
I send the email, external_id, and other information in my JWT, but I've read all the messages since 2022, and it's April 2025, and I'm not sure whether to add the "email_verified" field since they say it duplicates the number of users.
Please confirm if this new feature is working correctly.
0
John Witt
8329079355674 I have found that Zendesk requires an email_verified status to see non-public articles. I send the userid of the current user ($AJAX user.me) as the external_id, email_verified true, and the email to create the token. The problem with this is it will always create a new user since external_id doesn't exists, so one workaround is to prepopulate every user's external_id with their user_id before testing Messaging. I prefer make.com and powerautomate, but I assume any integration tool or ZIS could do it. Worst case is you have two users and need to merge.
0
Pierre
Thanks 1263169242090
Just to make sure I understand it correctly.
Can I pre-populate the external id in zendesk or do I need to do this using an API?
My assumption is that the bot can automatically recommend articles based on the questions the end user asks. Or do we still need to pre-configure recommended articles for certain questions within the bot?
Thanks again for your help.
0
John Witt
My articles were private, and the only way around this is to use email, external id, and email_verified=true. However, if you don't pre-populate the external id before doing this, it will create a new user (you'll need to merge or delete the other one).
0
Pierre
1263169242090, thanks for you response.
We did get he web widget to work by using the backend service. We use the JWT token as described, but still the bot does not return any useful articles. Only when we make our articles public it works as it should.
Is there a setting somewhere in Zendesk that will allow the bot to return articles without us having to make all our articles public facing?
0
John Witt
8329079355674 To properly encode, you need the algorithm of H256, the correct kid (from Account;end user security), and type of JWT. The payload really just needs scope=user and external_id, but I use email, name, and verified.
I recommend using one of the JWT encoder/decoders and hardcode the value into the ZE call until you get it working. You might be missing a parm to encode in your encoder. I found I was getting 401 Login issues as I was using the wrong kid to encode.
0
Pierre
Hi,
We have build our backend service that will generate the JWT tokens. We have followed the instructions as per the steps in this document.
We generate a JWT token with the required claims and then use the token in Postman as a Bearer token to test it. But we keep on receiving the status code 401.
Is there anything else we should have configured on Zendesk apart from the Signing key in the Messaging section?
Or should the issuer and audience properties of the JWT token be specific values?
0
John Witt
1265194314089 Did you ever get an answer to this? I am seeing the same. It's almost like I want to add more logic - get the user via email, and if they don't have an external id, then create one using their user id, then send the JWT request. I think the issue is it sees there' no external_id, but can't use the email since it's already in use, and doesn't just assume the one with the correct email address is correct.
0
Tamir Bashkin
Hey, check out this app: https://www.zendesk.com/marketplace/apps/support/1066145/messaging-and-help-center-authentication . It helps authenticate Help Center users on the messaging widget. Highly recommended! :)
0
Entrar para comentar.