Documentação
Configuracao de Login OAuth / OIDC¶
Permita que seus clientes facam login na central de suporte usando o provedor de identidade da propria empresa (Keycloak, Azure AD, Auth0, Okta, etc.).
OAuth/OIDC e ideal quando seus clientes ja possuem um sistema de identidade proprio e querem evitar criar senhas adicionais.
Como Funciona¶
Sistema Enterprise AtendeAqui Provider OIDC
(sistema do cliente) (central de suporte) (Keycloak, etc.)
| | |
|-- clica "Suporte" ---->| |
| | /perfil/login/{slug}/ |
| | |
| |-- redirect authorize_url ->|
| | |
| | usuario autoriza
| | |
| |<-- callback com code ------|
| | /perfil/callback/ |
| | |
| |-- troca code por token --->|
| |<-- access_token -----------|
| | |
| |-- GET userinfo ----------->|
| |<-- JSON do usuario --------|
| | |
| | cria/atualiza usuario |
| | cria/atualiza cliente |
| | faz login |
| | |
|<-- redirect dashboard -| |
- O usuario esta logado no sistema enterprise (ex: ERP, portal interno)
- Clica no botao "Central de Suporte", que aponta para a URL de Login do provedor no AtendeAqui
- O AtendeAqui redireciona automaticamente para o provider OIDC (sem tela de login intermediaria)
- Se o usuario ja esta autenticado no provider (SSO), o fluxo e transparente — ele nem percebe a autenticacao
- O provider redireciona de volta para o AtendeAqui com um codigo de autorizacao
- O AtendeAqui troca o codigo por um token, consulta o userinfo e faz login automaticamente
- O usuario e redirecionado para o dashboard de cliente
Se o usuario ja estiver autenticado no provider OIDC (ex: logado no Keycloak corporativo), o fluxo inteiro acontece em menos de 1 segundo — sem nenhuma tela de login visivel.
Configurando o Provedor¶
Passo 1: Acessar Configuracoes¶
- Acesse Painel > Configuracoes > Autenticacao
- Clique em Novo Provedor OAuth
Passo 2: Preencher os Dados¶
| Campo | Descricao | Exemplo |
|---|---|---|
| Nome do Provedor | Nome exibido no botao de login | Login Corporativo |
| URL de Autorizacao | Endpoint authorize do provider |
https://idp.empresa.com/auth/realms/main/protocol/openid-connect/auth |
| URL do Token | Endpoint token do provider |
https://idp.empresa.com/auth/realms/main/protocol/openid-connect/token |
| URL de Informacoes do Usuario | Endpoint userinfo do provider |
https://idp.empresa.com/auth/realms/main/protocol/openid-connect/userinfo |
| Client ID | Identificador do client no provider | atendeaqui-suporte |
| Client Secret | Segredo do client no provider | abc123... |
| URI de Redirecionamento | URL de callback (fornecida pelo AtendeAqui) | https://suaempresa.atendeaqui.com/perfil/callback/ |
| Provedor Ativo | Habilita/desabilita o provedor | Sim |
O **Client Secret** e armazenado de forma segura. Nunca compartilhe esse valor publicamente.
Passo 3: Configurar o Provider OIDC¶
No seu provedor de identidade, configure um client (ou "application") com:
- Client ID: O mesmo valor informado no AtendeAqui
- Client Secret: O mesmo valor informado no AtendeAqui
- Redirect URI: A URI de redirecionamento exibida no AtendeAqui (ex:
https://suaempresa.atendeaqui.com/perfil/callback/) - Grant Type:
authorization_code - Response Type:
code
Passo 4: Obter a URL de Login¶
Apos salvar o provedor, a URL de Login sera exibida na lista de provedores configurados (coluna "URL de Login"). Essa e a URL que o sistema enterprise do cliente deve usar.
Formato da URL:
https://{sua-org}.atendeaqui.com/perfil/login/{slug-do-provedor}/
Exemplo:
https://minhaempresa.atendeaqui.com/perfil/login/keycloak-corporativo/
Como compartilhar com o cliente enterprise:
- Acesse Painel > Configuracoes > Provedores OAuth
- Na lista, localize a coluna URL de Login (Provider)
- Clique no botao Copiar ao lado da URL
- Envie essa URL para o time de TI do cliente enterprise
- O cliente deve usar essa URL no botao "Central de Suporte" (ou similar) do sistema deles
A **URL de Callback** tambem e exibida no rodape da lista de provedores. Essa URL deve ser configurada no provider OIDC como Redirect URI. Ela e a mesma para todos os provedores da organizacao.
Passo 5: Testar¶
- Abra a URL de login em uma janela anonima do navegador
- Voce sera redirecionado ao provider OIDC
- Faca login com um usuario de teste
- Verifique se o usuario foi criado corretamente no painel do AtendeAqui
- Teste tambem o fluxo completo: acesse a URL a partir do sistema enterprise do cliente
Formato do UserInfo¶
O endpoint userinfo do seu provider deve retornar um JSON com os seguintes campos:
Campos obrigatorios¶
{
"sub": "user-unique-id-001",
"email": "joao@empresa.com.br"
}
| Campo | Descricao |
|---|---|
sub |
Identificador unico do usuario no provider. Alternativas aceitas: id, user_id |
email |
Email do usuario. Sera usado como username no AtendeAqui |
Campos opcionais do usuario¶
{
"sub": "user-unique-id-001",
"email": "joao@empresa.com.br",
"email_verified": true,
"name": "Joao da Silva",
"given_name": "Joao",
"family_name": "da Silva",
"picture": "https://idp.empresa.com/avatar/001.jpg"
}
| Campo | Descricao |
|---|---|
name |
Nome completo. Alternativas: displayName, full_name |
given_name |
Primeiro nome. Alternativa: first_name |
family_name |
Sobrenome. Alternativa: last_name |
picture |
URL do avatar. Alternativa: avatar_url |
email_verified |
Se o email foi verificado pelo provider |
Se `given_name` e `family_name` nao forem enviados, o sistema tenta extrair automaticamente do campo `name`.
Claim customizado: organization (opcional)¶
Para associar automaticamente usuarios a uma empresa cliente, seu provider pode incluir o claim organization:
{
"sub": "user-unique-id-001",
"email": "joao@empresa.com.br",
"name": "Joao da Silva",
"given_name": "Joao",
"family_name": "da Silva",
"organization": {
"id": "client-ext-001",
"name": "Empresa ABC Ltda",
"customer_since": "2024-01-15"
}
}
| Campo | Descricao |
|---|---|
organization.id |
Identificador unico da empresa no seu sistema. Todos os usuarios com o mesmo id serao agrupados como equipe do mesmo cliente |
organization.name |
Nome da empresa cliente |
organization.customer_since |
Data de inicio como cliente (informativo) |
Comportamento:
- Com
organization.id: Usuarios com o mesmo ID sao agrupados no mesmo cliente. Exemplo:joao@empresa.com.bremaria@empresa.com.brcomorganization.id = "client-ext-001"ficam na mesma equipe. - Sem
organization: Cada usuario cria um registro de cliente individual. A associacao entre usuarios pode ser feita manualmente pelo painel.
Em providers como Keycloak, use **protocol mappers** para incluir o claim `organization` no token/userinfo a partir de atributos do usuario ou grupo.
Exemplos por Provider¶
Keycloak¶
URLs tipicas:
Autorizacao: https://keycloak.empresa.com/realms/{realm}/protocol/openid-connect/auth
Token: https://keycloak.empresa.com/realms/{realm}/protocol/openid-connect/token
UserInfo: https://keycloak.empresa.com/realms/{realm}/protocol/openid-connect/userinfo
Configurando o claim organization no Keycloak:
- Acesse Clients > seu-client > Client Scopes > Dedicated Scope
- Clique em Add mapper > By configuration > User Attribute
- Crie mappers para cada campo:
| Mapper Name | User Attribute | Token Claim Name | Claim JSON Type |
|---|---|---|---|
org_id |
org_id |
organization.id |
String |
org_name |
org_name |
organization.name |
String |
- Preencha os atributos
org_ideorg_namenos usuarios do Keycloak
Azure AD / Entra ID¶
URLs tipicas:
Autorizacao: https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize
Token: https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
UserInfo: https://graph.microsoft.com/oidc/userinfo
No Azure AD, claims customizados podem ser adicionados via **Claims Mapping Policy** ou **Optional Claims** no App Registration.
Auth0¶
URLs tipicas:
Autorizacao: https://{tenant}.auth0.com/authorize
Token: https://{tenant}.auth0.com/oauth/token
UserInfo: https://{tenant}.auth0.com/userinfo
Para incluir organization no Auth0, use uma Action no fluxo de login:
exports.onExecutePostLogin = async (event, api) => {
api.idToken.setCustomClaim('organization', {
id: event.user.app_metadata.org_id,
name: event.user.app_metadata.org_name
});
};
Okta¶
URLs tipicas:
Autorizacao: https://{org}.okta.com/oauth2/default/v1/authorize
Token: https://{org}.okta.com/oauth2/default/v1/token
UserInfo: https://{org}.okta.com/oauth2/default/v1/userinfo
Multiplos Provedores¶
Voce pode configurar mais de um provedor OAuth por organizacao. Exemplos de uso:
- Um provedor para funcionarios (Azure AD corporativo) e outro para clientes externos (Keycloak)
- Provedores diferentes para clientes de regioes distintas
- Migracao gradual de um provider para outro
Cada provedor aparece como um botao separado na pagina de login.
Seguranca¶
Boas Praticas¶
- Use HTTPS em todas as URLs do provider
- Mantenha o Client Secret seguro - nunca exponha em codigo frontend
- Limite o Redirect URI no provider para aceitar apenas o dominio do AtendeAqui
- Rotacione secrets periodicamente - atualize o Client Secret a cada 6-12 meses
- Teste em ambiente de homologacao antes de ativar em producao
O que o AtendeAqui Protege¶
- Token state assinado: Previne ataques CSRF durante o fluxo OAuth
- Vinculo com sessao: O callback so e aceito pela mesma sessao que iniciou o fluxo
- Token de uso unico: Cada state token so pode ser usado uma vez
- Expiracao: Tokens state expiram apos 10 minutos
Troubleshooting¶
"Token de seguranca invalido"¶
- O fluxo demorou mais de 10 minutos. Tente novamente.
- O usuario abriu o login em outra aba. Use a mesma aba.
"Erro ao obter token de acesso"¶
- Verifique se o Client ID e Client Secret estao corretos
- Verifique se a URI de Redirecionamento no provider e identica a configurada no AtendeAqui
- Confirme que o provider esta acessivel na rede
"Erro ao obter informacoes do usuario"¶
- Verifique se a URL de Informacoes do Usuario (userinfo) esta correta
- Confirme que o token retornado pelo provider tem permissao para acessar o endpoint userinfo
- Verifique se os scopes
openid,profileeemailestao configurados no client do provider
Usuario criado mas nao associado ao cliente correto¶
- Verifique se o provider esta retornando o claim
organizationno userinfo - Confirme que
organization.ide consistente para todos os usuarios da mesma empresa - Use o painel para associar usuarios manualmente se necessario
"Dados do usuario sao invalidos"¶
- O provider nao esta retornando o campo
emailousub - Verifique a configuracao de scopes e claims no provider
Proximos Passos¶
Precisa de ajuda? Entre em contato com nosso suporte para auxiliar na configuracao do seu provedor OAuth.