Documentação
AuthServer — Sistema centralizado de autenticação multi-tenant.
Introdução
O AuthServer é um sistema de autenticação centralizado que permite gerir utilizadores, tenants (organizações), aplicações e permissões num único local.
Cada utilizador pode pertencer a múltiplos tenants. Cada tenant pode ter múltiplas aplicações. Cada aplicação tem as suas próprias permissões/rules.
Base URL: https://auth.wiot.network
Formato: JSON — todas as respostas seguem o formato { success, message, data, timestamp }
API
Todas as rotas API estão sob /api/v1/. As rotas protegidas exigem Authorization: Bearer <token>.
Autenticação
/api/v1/auth/login
Login com email/username + password.
curl -X POST https://auth.wiot.network/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"identifier":"admin@exemplo.com","password":"123456"}'
/api/v1/auth/magic-link
Solicita um link mágico para o email do utilizador.
curl -X POST https://auth.wiot.network/api/v1/auth/magic-link \
-H "Content-Type: application/json" \
-d '{"identifier":"admin@exemplo.com"}'
/api/v1/auth/magic-link/verify
Verifica o token do link mágico e retorna os tokens de acesso.
curl -X POST https://auth.wiot.network/api/v1/auth/magic-link/verify \
-H "Content-Type: application/json" \
-d '{"token":"...","email":"admin@exemplo.com"}'
/api/v1/auth/pin
Solicita um PIN de 6 dígitos para o email.
curl -X POST https://auth.wiot.network/api/v1/auth/pin \
-H "Content-Type: application/json" \
-d '{"identifier":"admin@exemplo.com"}'
/api/v1/auth/pin/verify
Verifica o PIN e retorna os tokens de acesso.
curl -X POST https://auth.wiot.network/api/v1/auth/pin/verify \
-H "Content-Type: application/json" \
-d '{"pin":"123456","email":"admin@exemplo.com"}'
/api/v1/auth/refresh
Renova o access token usando um refresh token.
curl -X POST https://auth.wiot.network/api/v1/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refreshToken":"..."}'
/api/v1/auth/me
Auth required
Retorna os dados do utilizador autenticado, tenants e permissões.
curl https://auth.wiot.network/api/v1/auth/me \
-H "Authorization: Bearer <token>"
/api/v1/auth/logout
Auth required
Revoga todos os tokens do utilizador.
curl -X POST https://auth.wiot.network/api/v1/auth/logout \
-H "Authorization: Bearer <token>"
Utilizadores
/api/v1/users
Lista utilizadores (paginado).
Parâmetros: page, perPage, search, tenantId
/api/v1/users
Cria um novo utilizador.
curl -X POST https://auth.wiot.network/api/v1/users \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"username": "joao",
"email": "joao@exemplo.com",
"password": "Secure123!",
"displayName": "João Silva",
"tenantId": 1
}'
Tenants
Um tenant representa uma organização ou projeto. Cada tenant pode ter várias aplicações.
/api/v1/tenants
Lista todos os tenants.
/api/v1/tenants
curl -X POST https://auth.wiot.network/api/v1/tenants \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"Empresa XYZ","slug":"empresa-xyz"}'
Permissões / Rules
As permissões são definidas por aplicação. Cada permissão tem um slug único (ex: verCidades) e um tipo (boolean, string, array, number).
/api/v1/permissions
curl -X POST https://auth.wiot.network/api/v1/permissions \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"appId": 1,
"name": "Ver Cidades",
"slug": "verCidades",
"type": "array"
}'
/api/v1/permissions/assign
Atribui uma permissão a um utilizador.
curl -X POST https://auth.wiot.network/api/v1/permissions/assign \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"userId": 1,
"permissionId": 1,
"appId": 1,
"value": ["Lisboa", "Porto"]
}'
SDKs
PHP
O SDK PHP gere automaticamente a sessão, refresh de tokens, e tratamento de erros.
<?php
require_once 'sdk/php/AuthClient.php';
$auth = new AuthClient('https://auth.wiot.network');
// Login com password
$auth->login('email@exemplo.com', 'password', $tenantId);
// Ou com magic link
$auth->loginWithMagicLink('token', 'email@exemplo.com');
// Ou com PIN
$auth->loginWithPin('123456', 'email@exemplo.com');
// Dados do utilizador
$user = $auth->me();
$tenants = $user['data']['tenants'];
// Mudar de tenant
$auth->switchTenant(2);
Python
from sdk.py.auth_client import AuthClient
auth = AuthClient('https://auth.wiot.network')
auth.login('email@exemplo.com', 'password')
# Ver perfil
profile = auth.me()
print(profile['data']['user'])
# Logout
auth.logout()
JavaScript
import { AuthClient } from './sdk/js/auth-client.js';
const auth = new AuthClient('https://auth.wiot.network');
await auth.login('email@exemplo.com', 'password');
const profile = await auth.me();
console.log(profile.data.user);
Exemplo de Fluxo
Fluxo típico de autenticação para uma aplicação de eletricidade:
- O técnico abre a app mobile e faz login via API
- O AuthServer valida as credenciais e retorna JWT + refresh token
- A app guarda o token e faz pedidos à API de backend com
Authorization: Bearer - O backend verifica as permissões do técnico (ex:
verCidades,limiteTecnicos) - Quando o token expira, o SDK faz refresh automático