Exemplos de Request/Response - ecosif-auth
Atualizado: login Azure/Google via
POST /api/auth/external-login.signin-azureremovido.
Este documento contém exemplos práticos de requisições e respostas para todos os endpoints da API.
Autenticação Local
Request
curl -X POST http://localhost:8080/api/auth/signin \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "admin123",
"azure": false
}'
Response (Sucesso)
{
"accessToken": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY0MDAwMDAwMCwiZXhwIjoxNjQwMDE4MDAwfQ.xyz",
"user": {
"id": "1",
"displayName": "Administrator",
"email": "admin",
"roles": ["ADMIN"],
"tenant": "TEMP_TENANT"
},
"tenantName": "TEMP_TENANT"
}
Response (Credenciais Inválidas)
{
"success": false,
"message": "Usuário ou senha incorretos"
}
Response (Usuário Inativo)
{
"success": false,
"message": "Usuário inativo"
}
Login externo (external-login)
Ver seção em autenticacao.md.
Login externo (external-login)
Request
curl -X POST http://localhost:8080/api/auth/external-login \
-H "Content-Type: application/json" \
-d '{
"provider": "AZURE",
"token": "<id_token do Entra ID>",
"tokenType": "ID_TOKEN"
}'
Response (Sucesso — auto-provision)
{
"accessToken": "eyJhbGciOiJIUzI1NiJ9...",
"user": {
"id": "3",
"displayName": "Maria Santos",
"email": "maria.santos@empresa.com",
"roles": ["STAFF"],
"tenant": "TEMP_TENANT"
},
"tenantName": "TEMP_TENANT"
}
Response (Erro — token inválido)
{
"success": false,
"message": "Token Microsoft inválido"
}
Response (Erro — usuário não cadastrado)
{
"success": false,
"message": "Usuário não encontrado no eCosif"
}
Obter Logs Docker
Request
TOKEN="eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY0MDAwMDAwMCwiZXhwIjoxNjQwMDE4MDAwfQ.xyz"
curl -X GET "http://localhost:8080/api/admin/docker-logs?service=ecosif-auth&lines=50" \
-H "Authorization: Bearer $TOKEN"
Response (Sucesso)
{
"service": "ecosif-auth",
"containerName": "ecosif-auth",
"lines": 50,
"logs": "2024-01-01 10:00:00.000 INFO [main] io.ecosif.auth.Application : Starting Application\n2024-01-01 10:00:01.000 INFO [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http)\n2024-01-01 10:00:02.000 INFO [main] io.ecosif.auth.Application : Started Application in 2.5 seconds\n"
}
Response (Serviço Não Encontrado)
{
"error": "Serviço não encontrado: servico-inexistente",
"availableServices": [
"ecosif-auth",
"ecosif-masterdata",
"ecosif-moviments",
"ecosif-querys",
"ecosif-reports",
"ecosif-compliance",
"ecosif-angular",
"nginx",
"postgres"
]
}
Response (Token Inválido)
HTTP/1.1 401 Unauthorized
Listar Serviços para Logs
Request
TOKEN="eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY0MDAwMDAwMCwiZXhwIjoxNjQwMDE4MDAwfQ.xyz"
curl -X GET "http://localhost:8080/api/admin/docker-logs/services" \
-H "Authorization: Bearer $TOKEN"
Response (Sucesso)
{
"services": [
"ecosif-auth",
"ecosif-masterdata",
"ecosif-moviments",
"ecosif-querys",
"ecosif-reports",
"ecosif-compliance",
"ecosif-angular",
"nginx",
"postgres"
],
"serviceToContainer": {
"ecosif-auth": "ecosif-auth",
"ecosif-masterdata": "ecosif-masterdata",
"ecosif-moviments": "ecosif-moviments",
"ecosif-querys": "ecosif-querys",
"ecosif-reports": "ecosif-reports",
"ecosif-compliance": "ecosif-compliance",
"ecosif-angular": "ecosif-angular",
"nginx": "ecosif-nginx",
"postgres": "ecosif-postgres"
}
}
Health Check
Request
curl http://localhost:8080/actuator/health
Response (Sucesso)
{
"status": "UP",
"components": {
"db": {
"status": "UP",
"details": {
"database": "PostgreSQL",
"validationQuery": "isValid()"
}
}
}
}
Response (Serviço Indisponível)
{
"status": "DOWN",
"components": {
"db": {
"status": "DOWN"
}
}
}
Exemplos em JavaScript
Autenticação e Uso do Token
// 1. Fazer login
async function fazerLogin(username, password) {
const response = await fetch('http://localhost:8080/api/auth/signin', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: username,
password: password,
azure: false
})
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message);
}
const data = await response.json();
return data.accessToken;
}
// 2. Usar token em requisições
async function obterLogs(service, token) {
const response = await fetch(
`http://localhost:8080/api/admin/docker-logs?service=${service}&lines=100`,
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
if (!response.ok) {
if (response.status === 401) {
throw new Error('Token expirado ou inválido');
}
const error = await response.json();
throw new Error(error.message || 'Erro na requisição');
}
return await response.json();
}
// 3. Uso completo
(async () => {
try {
const token = await fazerLogin('admin', 'admin123');
console.log('Token obtido:', token);
const logs = await obterLogs('ecosif-auth', token);
console.log('Logs:', logs);
} catch (error) {
console.error('Erro:', error.message);
}
})();
Exemplos em Python
import requests
# 1. Fazer login
def fazer_login(username, password):
url = 'http://localhost:8080/api/auth/signin'
data = {
'username': username,
'password': password,
'azure': False
}
response = requests.post(url, json=data)
response.raise_for_status()
return response.json()['accessToken']
# 2. Obter logs
def obter_logs(service, token, lines=100):
url = f'http://localhost:8080/api/admin/docker-logs'
params = {
'service': service,
'lines': lines
}
headers = {
'Authorization': f'Bearer {token}'
}
response = requests.get(url, params=params, headers=headers)
response.raise_for_status()
return response.json()
# 3. Uso completo
if __name__ == '__main__':
try:
token = fazer_login('admin', 'admin123')
print(f'Token obtido: {token[:50]}...')
logs = obter_logs('ecosif-auth', token)
print(f'Logs obtidos: {len(logs["logs"])} caracteres')
except requests.exceptions.HTTPError as e:
print(f'Erro HTTP: {e}')
except Exception as e:
print(f'Erro: {e}')
Exemplos em Java
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import com.fasterxml.jackson.databind.ObjectMapper;
public class EcosifAuthClient {
private final HttpClient client = HttpClient.newHttpClient();
private final ObjectMapper mapper = new ObjectMapper();
private final String baseUrl = "http://localhost:8080";
public String fazerLogin(String username, String password) throws Exception {
String json = String.format(
"{\"username\":\"%s\",\"password\":\"%s\",\"azure\":false}",
username, password
);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(baseUrl + "/api/auth/signin"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new RuntimeException("Erro no login: " + response.body());
}
Map<String, Object> data = mapper.readValue(response.body(), Map.class);
return (String) data.get("accessToken");
}
public String obterLogs(String service, String token) throws Exception {
String url = baseUrl + "/api/admin/docker-logs?service=" + service + "&lines=100";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer " + token)
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new RuntimeException("Erro ao obter logs: " + response.body());
}
return response.body();
}
}
Próximos Passos
- Uso da API: Saiba mais sobre como usar a API
- Erros Comuns: Resolva problemas frequentes
- Autenticação: Aprenda mais sobre autenticação