Interface de SSO de Contatos
Este artigo explica como autenticar um contato com um endereço de e-mail ou um ID de usuário de terceiros. Ele usa o mesmo appId e Secret Key que a interface SSO de subconta, mas a URL, os campos da assinatura e a página de destino são diferentes. Crie subcontas e defina funções com a interface SSO de subconta.
Visão geral
Envie o e-mail do contato ou o ID de usuário de terceiros. A SurveyMars verifica a assinatura e autentica esse contato.
- Se o contato for uma subconta, a SurveyMars abre returnUrl. Se returnUrl for omitido, ela abre a lista de pesquisas.
- Se o contato não for uma subconta, a SurveyMars ignora returnUrl e abre a página inicial do contato.
Casos de uso
- Seu sistema já tem um e-mail de contato ou um ID de usuário de terceiros, e você quer acesso sem senha à SurveyMars.
- Um contato de subconta acessa returnUrl. Outros contatos ignoram returnUrl e acessam a página inicial do contato.
Antes de começar
1. Entre com a conta principal e copie o appId em Minha conta.
2. Peça ao suporte para habilitar a Secret Key. Use a chave apenas no seu servidor. Não a coloque na URL nem no código do front-end.
3. Gere a assinatura SHA256 no seu servidor e depois abra o link de login com GET.

Solicitação
Método: GET
| Parâmetro | Obrigatório | Descrição |
| appId | Sim | ID da conta principal. Use o mesmo appId da interface SSO de subconta. |
| Condicional | E-mail do contato. Forneça email ou thirdUserId, ou ambos. email é obrigatório quando a conta principal não अनुमति empty contact email. | |
| thirdUserId | Condicional | ID de usuário de terceiros. Forneça email ou thirdUserId, ou ambos. Se ambos forem enviados, a verificação usa apenas o email. thirdUserId ainda entra na assinatura. |
| language | Não | Idioma das mensagens de solicitação. Não entra na assinatura. |
| returnUrl | Não | Página a ser aberta depois que uma subconta entra. A SurveyMars a segue para um contato de subconta e a ignora nos demais casos. Não entra na assinatura. |
| ts | Sim | Segundos desde 1970-01-01 00:00:00 UTC. Permanece válido por 60 segundos. O ts na URL deve corresponder ao ts usado na assinatura. Gere-o quando o usuário estiver prestes a abrir o link. |
| sign | Sim | Assinatura. sign é o SHA256 em hexadecimal minúsculo do texto em claro combinado: appId + email + thirdUserId + ts + Secret Key. A ordem deve corresponder exatamente. A Secret Key é combinada apenas no servidor e não deve aparecer na barra de endereços do navegador. Veja como criar a assinatura abaixo. |
Criar a assinatura
Regras da assinatura
1. Una os campos da assinatura em uma ordem fixa, sem separador: appId + email + thirdUserId + ts + Secret Key. Se email ou thirdUserId for omitido, use uma string vazia nessa posição. Não remova o campo e não o substitua por um marcador. A Secret Key é combinada apenas no servidor e não deve aparecer na barra de endereços do navegador.
2. Faça o hash dessa string com SHA256 e use o valor hexadecimal em minúsculas como sign.
3. language e returnUrl não entram na assinatura. Use apenas os campos e a ordem do passo 1.
4. ts é o número de segundos desde 1970-01-01 00:00:00 UTC. Ele permanece válido por 60 seconds. Gere ts e sign quando o usuário estiver prestes a abrir o link e use o mesmo ts na URL. A codificação da URL não deve alterar os valores originais usados na assinatura.
5. Para verificar a string combinada, cole-a em uma ferramenta SHA256 como LZL online SHA256. Em produção, gere sign no seu servidor. Não exponha a Secret Key ao navegador.
6. Não reutilize uma assinatura de SSO de subconta. Essa string usa appId, email, userName, roleId e ts. Esta interface não usa userName nem roleId.
Por exemplo:
http://surveymars.com/app/login/contact/verify?appId=TTeEB8&[email protected]&ts=1790760357&language=2&returnUrl=https://surveymars.com/app/usercenter&sign=26c0c7d9da5e38c61d4aeecb223336d7a259cad0b75c8ff912855421fd832a4e
E-mail e ID de usuário de terceiros
1. Envie pelo menos um entre email e thirdUserId.
2. Se enviar ambos, a verificação usa email e ignora thirdUserId. Mantenha o thirdUserId original na assinatura e você pode mantê-lo na URL.
3. Se a conta principal não tiver permitido um e-mail de contato vazio, email é obrigatório.
4. Se essa configuração estiver desativada, entre em contato com o suporte para ativar "Allow empty contact email." Depois que estiver ativada, você poderá adicionar um contato sem e-mail.
Para onde o contato é levado
1. Contato de subconta: a SurveyMars abre returnUrl. Se returnUrl for omitido, ela abre a lista de pesquisas.
2. Outros contatos: a SurveyMars ignora returnUrl e abre a página inicial do contato.
Observações importantes
- Mantenha a Secret Key no seu servidor. Não a coloque na barra de endereços do navegador.
- Esta interface autentica um contato. Ela não cria uma subconta nem define uma função de subconta.
- Codifique na URL caracteres como @ no e-mail. Assine o valor original, não o valor codificado.
Perguntas frequentes
Qual é a diferença em relação ao SSO de subconta?
O SSO de subconta usa /app/login/sso/verify para criar ou autenticar uma subconta. O login de contato usa /app/login/contact/verify com um e-mail ou um ID de usuário de terceiros. Os campos da assinatura são diferentes. Não reutilize sign.
Posso enviar apenas thirdUserId?
Sim, se a conta principal permitir um e-mail de contato vazio. Caso contrário, email é obrigatório. Use uma string vazia para o campo omitido na assinatura.
Enviei email e thirdUserId. Por que o login usa o email?
Quando ambos estão presentes, a verificação ignora thirdUserId e identifica o contato pelo email. thirdUserId ainda entra na assinatura.
Por que um contato que não é subconta pulou returnUrl?
returnUrl se aplica apenas quando o contato é uma subconta. Caso contrário, a SurveyMars o ignora e abre a página inicial do contato.
Por que a verificação da assinatura falha?
Verifique a Secret Key. Combine appId, email, thirdUserId, ts e a Secret Key nessa ordem. Use uma string vazia para um email ou thirdUserId omitido. Confirme que ts ainda está dentro de 60 segundos e que a codificação da URL não alterou os valores originais. Não inclua language nem returnUrl.
Por que o ts expira tão rápido?
Em produção, o ts deve estar dentro de 60 segundos do horário do servidor. Gere ts e sign quando o usuário estiver prestes a abrir o link.