Pular para o conteúdo principal

IAM - Identity and Access Management

O Building Block IAM fornece funcionalidades para gerenciamento de identidade e acesso na Catalisa Platform.

Visão Geral

O IAM é um módulo global, ou seja, não requer escopo de organização para algumas operações (como autenticação). Ele é responsável por:

  • Autenticação de usuários e aplicações
  • Gerenciamento de usuários
  • Gerenciamento de organizações
  • Controle de acesso baseado em roles (RBAC)
  • Associações usuário-organização-role

Base URL

https://api.catalisa.io/iam

Recursos

RecursoDescrição
OAuthAutenticação e tokens de acesso
UsuáriosGerenciamento de usuários
OrganizaçõesGerenciamento de organizações
RolesRoles e permissões
AssociationsAssociações usuário-organização

Endpoints

Públicos (sem autenticação)

MétodoEndpointDescrição
POST/oauth/tokenObter token de acesso
POST/api/v1/users/loginLogin de usuário

Autenticados

MétodoEndpointDescrição
POST/api/v1/usersCriar usuário
GET/api/v1/usersListar usuários
GET/api/v1/users/:idObter usuário
PATCH/api/v1/users/:idAtualizar usuário
DELETE/api/v1/users/:idExcluir usuário
POST/api/v1/organizationsCriar organização
GET/api/v1/organizationsListar organizações
GET/api/v1/organizations/:idObter organização
PATCH/api/v1/organizations/:idAtualizar organização
DELETE/api/v1/organizations/:idExcluir organização
POST/api/v1/organizations/:id/client-secretDefinir client secret
GET/api/v1/rolesListar roles
GET/api/v1/roles/:name/permissionsObter permissões de uma role
GET/api/v1/permissionsListar todas as permissões
POST/api/v1/associationsAtribuir role a usuário
DELETE/api/v1/associationsRemover role de usuário
GET/api/v1/users/:id/associationsListar associações do usuário
GET/api/v1/organizations/:id/membersListar membros da organização

Conceitos Importantes

Usuários

Usuários são entidades que podem se autenticar na plataforma. Cada usuário possui:

  • Email único
  • Senha (hash)
  • Status (ativo, inativo, bloqueado, pendente)
  • Flag de MFA

Organizações

Organizações representam tenants na plataforma. Tipos disponíveis:

  • cliente - Organização cliente
  • parceiro - Organização parceira
  • dono - Organização proprietária

Roles e Permissões

O sistema utiliza RBAC para controle de acesso. Cada role possui um conjunto de permissões predefinidas.

Associações

Associações vinculam usuários a organizações com uma role específica. Um usuário pode estar associado a múltiplas organizações com diferentes roles.

Exemplo Rápido

Fluxo básico para criar uma organização e adicionar um usuário:

// 1. Obter token de acesso (Client Credentials)
const tokenResponse = await fetch('https://api.catalisa.io/iam/oauth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
grant_type: 'client_credentials',
client_id: 'sua-org-id',
client_secret: 'seu-secret',
}),
});
const { access_token } = await tokenResponse.json();

// 2. Criar usuário
const userResponse = await fetch('https://api.catalisa.io/iam/api/v1/users', {
method: 'POST',
headers: {
'Authorization': `Bearer ${access_token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: 'novo.usuário@empresa.com',
password: 'senhaSegura123',
}),
});
const { data: user } = await userResponse.json();

// 3. Associar usuário a organização com role ADMIN
await fetch('https://api.catalisa.io/iam/api/v1/associations', {
method: 'POST',
headers: {
'Authorization': `Bearer ${access_token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
userId: user.id,
organizationId: 'org-id',
roleId: 1, // ADMIN
}),
});

Diagrama de Relacionamentos

┌────────────────┐         ┌─────────────────────┐         ┌────────────────┐
│ User │ │ Association │ │ Organization │
├────────────────┤ ├─────────────────────┤ ├────────────────┤
│ id │◄───────►│ userId │◄───────►│ id │
│ email │ │ organizationId │ │ name │
│ status │ │ roleId │ │ slug │
│ mfaEnabled │ │ roleName │ │ type │
└────────────────┘ └─────────────────────┘ │ status │
│ │ clientSecret │
▼ └────────────────┘
┌────────────────┐
│ Role │
├────────────────┤
│ id │
│ name │
│ permissions[] │
└────────────────┘