Saltar al contenido principal

Uso da API

Uso da API​

Tudo o que a tela do IAM faz está na Public API da NNumbers Console, sob o prefixo /v1/iam. A Console usa as mesmas rotas.

  • Autenticação: token de acesso do seu tenant, obtido pela CLI da NNumbers, no cabeçalho Authorization.
  • Tenant: vem sempre do token. Nenhuma rota de tenant recebe o tenant como parâmetro, e um recurso de outro tenant responde 404.
  • Autorização: cada rota exige uma permissão iam.*; a API confere em toda requisição.

Rotas​

Método e rotaPermissãoResposta
GET /v1/iam/overviewiam.user.readestado do IAM no tenant
GET /v1/iam/productsiam.access.readprodutos ativos visíveis ao tenant
GET /v1/iam/products/{product}/rolesiam.access.readpapéis de um produto, com as permissões
GET /v1/iam/usersiam.user.readusuários, com q, status, cursor e limit; source (local ou external_directory)
POST /v1/iam/usersiam.user.managecriar usuário (202): {email, first_name?, last_name?, send_invite}; e-mail em uso = 409 user_already_exists
GET /v1/iam/users/{user_id}iam.user.readusuário, grupos e o último convite (invitation)
GET /v1/iam/users/{user_id}/securityiam.user.readsegurança lida na hora: MFA, login federado, senha, pendências e last_login
POST /v1/iam/users/{user_id}/inviteiam.user.managereenviar o convite (202; só pendente)
POST /v1/iam/users/{user_id}/reset-passwordiam.user.manageresetar a senha por e-mail (202)
POST /v1/iam/users/{user_id}/enable e …/disableiam.user.managehabilitar e desabilitar (202)
DELETE /v1/iam/users/{user_id}iam.user.manageexcluir (202)
GET /v1/iam/users/{user_id}/accessiam.access.readacesso por produto
GET /v1/iam/users/{user_id}/effective-permissionsiam.access.readpermissões efetivas com a origem
POST /v1/iam/users/{user_id}/grantsiam.access.manageconceder papel (202)
DELETE /v1/iam/users/{user_id}/grants/{grant_id}iam.access.managerevogar (202)
GET /v1/iam/grantsiam.access.readconcessões, com subject, product e state; subject_name (o nome de quem recebeu)
GET /v1/iam/groupsiam.group.readgrupos
GET /v1/iam/groups/{group_id}/membersiam.group.readmembros
GET /v1/iam/service-accountsiam.service_account.readservice accounts e capability (se a função está pronta no tenant)
POST /v1/iam/service-accountsiam.service_account.managecriar (202): {name, description?, roles, delivery_key}; papéis exigem também iam.access.manage
GET /v1/iam/service-accounts/{sa_id}iam.service_account.readservice account e last_used
PATCH /v1/iam/service-accounts/{sa_id}iam.service_account.manageeditar nome, descrição e papéis (202)
POST /v1/iam/service-accounts/{sa_id}/rotateiam.service_account.managegirar o segredo (202): {delivery_key}
GET /v1/iam/service-accounts/{sa_id}/delivery?operation_id=iam.service_account.manageo segredo cifrado da criação ou do giro (secret_jwe), só para quem pediu e até 1 hora depois
POST /v1/iam/service-accounts/{sa_id}/enable e …/disableiam.service_account.manageativar e desativar (202)
DELETE /v1/iam/service-accounts/{sa_id}iam.service_account.managerevogar (202)
GET /v1/iam/federation/providersiam.federation.readprovedores de identidade (com redirect_uri), capability e redirect_base (a URL de retorno de um provedor é <redirect_base>/<identificador>/endpoint)
GET /v1/iam/federation/intake-keyiam.federation.managea chave pública para cifrar o segredo do provedor
GET /v1/iam/federation/providers/{alias}iam.federation.readprovedor, o último teste de conexão e a URL de retorno (redirect_uri)
PUT /v1/iam/federation/providers/{alias}iam.federation.managecriar ou alterar (202): {type, display_name, client_id, client_secret_jwe?, discovery_url?, tenant_id?, scopes?, domain_hint?, enabled?}
POST /v1/iam/federation/providers/{alias}/test, …/enable e …/disableiam.federation.managetestar a conexão, ativar e desativar (202)
DELETE /v1/iam/federation/providers/{alias}iam.federation.manageremover (202)
GET /v1/iam/securityiam.security.reada política lida na hora e a guarda do login por senha
PUT /v1/iam/securityiam.security.manageaplicar a política (202): {mfa, password, session, password_login}
GET /v1/iam/actions/{action_id}iam.action.readestado de uma operação

O IAM administra só o tenant do token: não há rota que leia ou altere outro tenant.

Paginação​

As listas devolvem next_cursor. Para a próxima página, repita a chamada com cursor=<next_cursor>; null quer dizer que acabou. O limit vai de 1 a 200 (padrão 50).

Mutações assíncronas​

Toda mutação:

  1. exige o cabeçalho Idempotency-Key (até 128 caracteres). Repetir a chamada com a mesma chave devolve a mesma operação, sem efeito duplo;
  2. responde 202 com uma Action e o cabeçalho Location;
  3. termina quando a Action chega a succeeded, failed ou cancelled. Consulte GET /v1/iam/actions/{action_id} com espera crescente (de 1 a 10 segundos).

Exemplo de corpo para conceder um papel:

{"role": "infinite-data.viewer"}

Exemplo de corpo para criar um usuário com o convite (o resultado da Action traz user_id e invitation):

{"email": "ana@acme.com.br", "first_name": "Ana", "send_invite": true}

O papel é o nome qualificado <produto>.<papel>, como aparece em GET /v1/iam/products/{product}/roles, ou tenant.owner.

Segredos cifrados​

Nenhum segredo trafega em claro pela API do IAM. Os dois formatos usam JWE compacto (RFC 7516) com alg: ECDH-ES+A256KW, enc: A256GCM e chaves EC P-256:

  • Service account (entrega): gere um par de chaves efêmero e mande só a chave pública em delivery_key (exemplo abaixo; nunca o d). Quando a Action da criação ou do giro termina com delivery: true, busque a entrega com o operation_id do resultado e abra o secret_jwe com a sua chave privada. A entrega vale 1 hora e só para quem fez o pedido;
  • Provedor de identidade (intake): leia a chave de GET /v1/iam/federation/intake-key e mande o segredo do aplicativo cifrado para ela em client_secret_jwe, com o kid da chave.
{"kty": "EC", "crv": "P-256", "x": "<x em base64url>", "y": "<y em base64url>", "use": "enc"}
GET /v1/iam/service-accounts/{sa_id}/delivery?operation_id={operation_id}

Erros​

Os erros seguem o envelope padrão da Console, com code, reason, message, retryable e correlation_id. Os motivos do IAM estão em Solução de problemas. retryable: true quer dizer que repetir com a mesma Idempotency-Key é seguro.

Depois de uma revogação, requisições com um token anterior recebem 401 reauth_required: obtenha um token novo.