Estamos revisando estes procedimentos. Pessoas técnicas podem encontrar ajustes em códigos de erro ou mapeamentos de payload; valide com os logs e o OpenAPI mais recente. Pessoas não técnicas podem continuar usando o passo a passo e acionar o time de suporte caso algo pareça diferente do descrito.
🔐 Fluxo de Login
Este guia apresenta o fluxo completo de autenticação para usuários já cadastrados no sistema.
📋 Visão Geral
O fluxo de login permite que usuários autentiquem-se usando CPF e senha, gerando tokens de acesso OAuth 2.0 válidos por 5 minutos.
🔑 1. Login com Usuário e Senha
Para autenticar um usuário no sistema, você precisa gerar um token de acesso OAuth 2.0.
Endpoint
POST https://ssohml.credsystem.com.br/auth/realms/{realm}/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded
Exemplos de Código
cURL
curl -X POST 'https://ssohml.credsystem.com.br/auth/realms/{realm}/protocol/openid-connect/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'client_id=YOUR_CLIENT_ID' \
-d 'client_secret=YOUR_CLIENT_SECRET' \
-d 'username=12345678909' \
-d 'password=SenhaDoUsuario' \
-d 'grant_type=password' \
-d 'infosAdicionais={"dispositivoId":"device123","modelo":"Samsung Galaxy"}'
JavaScript
const response = await fetch('https://ssohml.credsystem.com.br/auth/realms/{realm}/protocol/openid-connect/token', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
username: '12345678909',
password: 'SenhaDoUsuario',
grant_type: 'password',
infosAdicionais: JSON.stringify({
dispositivoId: 'device123',
modelo: 'Samsung Galaxy'
})
})
});
const data = await response.json();
console.log(data.access_token);
Python
import requests
url = 'https://ssohml.credsystem.com.br/auth/realms/{realm}/protocol/openid-connect/token'
data = {
'client_id': 'YOUR_CLIENT_ID',
'client_secret': 'YOUR_CLIENT_SECRET',
'username': '12345678909',
'password': 'SenhaDoUsuario',
'grant_type': 'password',
'infosAdicionais': '{"dispositivoId":"device123","modelo":"Samsung Galaxy"}'
}
response = requests.post(url, data=data)
tokens = response.json()
print(tokens['access_token'])
Java
HttpClient client = HttpClient.newHttpClient();
Map<String, String> data = new HashMap<>();
data.put("client_id", "YOUR_CLIENT_ID");
data.put("client_secret", "YOUR_CLIENT_SECRET");
data.put("username", "12345678909");
data.put("password", "SenhaDoUsuario");
data.put("grant_type", "password");
data.put("infosAdicionais", "{\"dispositivoId\":\"device123\"}");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://ssohml.credsystem.com.br/auth/realms/{realm}/protocol/openid-connect/token"))
.header("Content-Type", "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString(
data.entrySet().stream()
.map(e -> e.getKey() + "=" + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
.collect(Collectors.joining("&"))
))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
📥 Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
client_id | string | ✅ | ID do cliente fornecido pela equipe |
client_secret | string | ✅ | Secret do cliente (mantenha seguro!) |
username | string | ✅ | CPF do usuário (apenas números) |
password | string | ✅ | Senha do usuário |
grant_type | string | ✅ | Fixo: password |
infosAdicionais | JSON string | ✅ | Informações do dispositivo codificadas |
📤 Resposta de Sucesso
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI...",
"expires_in": 300,
"refresh_expires_in": 1800,
"token_type": "Bearer",
"not-before-policy": 0,
"session_state": "f3d2e1c0-b9a8-7654-3210-abcdef123456",
"scope": "profile email"
}
- Guarde o
access_tokene orefresh_tokende forma segura - O
access_tokenexpira em 5 minutos (expires_in: 300) - Use o
refresh_tokenpara renovar sem pedir credenciais novamente - NUNCA exponha o
client_secretem código frontend
O grant type password é adequado apenas para aplicações mobile/desktop de primeira parte. Para aplicações web, use Authorization Code Flow com PKCE.
🔄 2. Renovação de Token (Refresh Token)
Quando o token de acesso expirar (após 5 minutos), você pode renová-lo usando o refresh token sem precisar das credenciais do usuário.
Endpoint
POST https://ssohml.credsystem.com.br/auth/realms/{realm}/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded