Pular para o conteúdo

Fluxo Authorization Code + Redirecionamento Personalizado

Use o fluxo Authorization Code + redirecionamento HTTPS personalizado para aplicativos web que agem em nome de um usuário conectado e recebem o callback OAuth no seu próprio domínio. Ele usa Authorization Code com PKCE, uma URI de redirecionamento HTTPS de correspondência exata e um segredo de cliente opcional para clientes confidenciais do lado do servidor.

Consulte primeiro o guia Primeiros passos se você ainda não conhece os pré-requisitos, o acesso de rede e o modelo de segurança.


  1. Criar um aplicativo OAuth: Registre um aplicativo web no Prevu3D com sua URL de callback HTTPS
  2. Configurar o acesso do usuário: Garanta que o usuário que fará login consiga alcançar os dados de que precisa
  3. Autorizar com PKCE: Envie o usuário à página de consentimento no navegador
  4. Trocar o código por um token: Troque o código de autorização por um token de acesso
  5. Encontrar sua URL da API: Descubra a URL base da sua organização (ela varia por região)
  6. Fazer sua primeira chamada: Teste a conexão com uma requisição simples
  1. Faça login na Plataforma Prevu3D.
  2. Vá em SettingsOAuth.
  3. Clique para criar um novo aplicativo.
  4. Ative o Authorization Code flow.
  5. Deixe Native Application desativado.
  6. Informe sua Redirect URI, por exemplo https://app.example.com/oauth/callback. Ela precisa ser HTTPS com um nome de domínio totalmente qualificado e precisa corresponder exatamente na autorização e na troca do token.
  7. Opcionalmente, ative um segredo de cliente se seu aplicativo puder armazená-lo no lado do servidor. Clientes públicos apenas de navegador não devem usar segredo.
  8. Copie e armazene com segurança seu Client ID (e o segredo, se gerado).

Este fluxo chama a API como o usuário conectado, não como um usuário de serviço. Isso cobre as camadas 2 e 3 do modelo de segurança: quais nós o usuário pode ver (acesso ao conteúdo) e o que ele pode fazer com eles (acesso por função/permissão).

  1. Garanta que o usuário que fará login tenha acesso ao conteúdo dos nós (organizações, divisões, sites etc.) que seu caso de uso exige.
  2. Garanta que o usuário tenha uma função nesses nós com as permissões de que sua integração precisa (ler, editar, gerenciar etc.).

Na tela de consentimento, o usuário também seleciona qual organização autorizar. Os escopos que o usuário aprova ali configuram a camada 1.

Antes de abrir a página de consentimento, gere três valores:

ValorComo
code_verifierString aleatória, de 43 a 128 caracteres
code_challengeBASE64URL(SHA256(code_verifier)) sem preenchimento
stateString aleatória; valide-a quando o redirecionamento retornar

Abra o navegador do usuário na página de consentimento.

URL de consentimento: https://cloud.prevu3d.com/oauth

Parâmetros de consulta (todos obrigatórios):

ParâmetroValor
response_typecode
code_challenge_methodS256
client_idSeu Client ID
redirect_uriSua URI de callback HTTPS registrada (correspondência exata, sem barra final, a menos que registrada)
scopesUm por escopo, por exemplo scopes=read:basic&scopes=read:hierarchy
code_challengeO desafio PKCE gerado acima
stateSeu valor de state aleatório

Depois que o usuário fizer login e clicar em Allow, o navegador redireciona para seu callback:

https://app.example.com/oauth/callback?code={authorization_code}&state={state}

Se o usuário negar o acesso, você receberá ?error=access_denied em vez disso. Os códigos de autorização expiram após 60 segundos, portanto troque-os imediatamente.

Endpoint: POST https://cloud-api.prevu3d.com/oauth/token

Cabeçalhos: Content-Type: application/x-www-form-urlencoded

Corpo:

CampoValor
grant_typeauthorization_code
client_idSeu Client ID
codeCódigo do redirecionamento
redirect_uriA mesma URI usada na Etapa 3
code_verifierO verificador PKCE original
client_secretSomente se seu aplicativo tiver um segredo

Você pode enviar client_id e client_secret no corpo ou usar Authorization: Basic base64(client_id:client_secret).

Exemplo de resposta:

{
"hasError": false,
"expires_in": 86400,
"access_token": "eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "..."
}

Salve os dois tokens. Use o access_token para chamadas à API. Quando ele expirar, solicite um novo com grant_type=refresh_token e seu refresh_token armazenado.

Chame o endpoint de descoberta para obter a apiUrl da sua organização. Não codifique uma URL regional de forma fixa.

Endpoint: GET https://cloud-api.prevu3d.com/oauth/api-info

Cabeçalhos: Authorization: Bearer <your_access_token>

Exemplo de resposta:

{
"user": { "..." : "..." },
"organization": {
"id": "217ebd23-ec54-4af0-a6d6-4a441a6d1966",
"name": "Test Organization"
},
"scopes": ["read:basic", "read:hierarchy"],
"apiUrl": "https://api-ue1.prevu3d.com/realityconnect-api"
}

Use o valor de apiUrl como base para todas as suas chamadas à API. Anote também o organization.id, de que você precisará em muitos endpoints.

Agora você tem tudo de que precisa: um token de acesso e sua URL base. Vamos fazer uma requisição simples para recuperar as divisões da sua organização:

GET {apiUrl}/v1/nodes/{organization_id}/browse
Authorization: Bearer <your_access_token>

Exemplo com valores reais:

GET https://api-ue1.prevu3d.com/realityconnect-api/v1/nodes/217ebd23-ec54-4af0-a6d6-4a441a6d1966/browse HTTP/1.1
Authorization: Bearer eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9...

Uma resposta bem-sucedida contendo uma lista de divisões confirma que sua integração está funcionando corretamente.

SintomaO que verificar
Redirect URI mismatch no consentimento ou na troca do tokenA redirect_uri precisa corresponder ao valor registrado no aplicativo OAuth caractere por caractere
Invalid OAuth redirect URI ao salvar o aplicativoUse https, um nome de domínio válido, sem query string nem fragmento na URI registrada
Bad OAuth application secretInclua client_secret apenas se o aplicativo foi criado com um segredo
Grant exchange expiredOs códigos de autorização expiram após 60 segundos; reinicie o fluxo
403 nas chamadas à RCAPIO usuário pode não ter acesso ao conteúdo, função no nó ou escopo OAuth para a operação

Precisa de um redirecionamento loopback para um aplicativo de desktop ou uma CLI? Use o Fluxo de Aplicativo Nativo em vez disso.