OAuth 2.0

Prev Next

Visão geral

Bem-vindo a uma exploração do OAuth 2.0, um protocolo de autenticação poderoso, mas muitas vezes mal compreendido, no universo do Tulip. Neste artigo, vamos desvendar os fundamentos, orientá-lo pelos fluxos de autenticação suportados pelo Tulip, esclarecer a configuração do seu conector inicial e compartilhar dicas rápidas para um início sem complicações.

Para saber como o Tulip lida com tokens de atualização, gerenciamento de escopo e público-alvo, além de configurações de conectores personalizados, consulte a seção Detalhes técnicos.

Tipos de autenticação

O Tulip oferece suporte a três tipos de autenticação OAuth 2.0: OAuth 2.0 (Conta de Serviço), OAuth 2.0 (Credenciais do Usuário) e OAuth 2.0 (Credenciais do Cliente). A principal diferença está na forma como as credenciais são compartilhadas entre os usuários e no fluxo executado de acordo com a especificação OAuth. Uma lista completa e uma descrição dos fluxos exclusivos do OAuth estão disponíveis aqui: https://frontegg.com/blog/oauth-flows.

Note

In older Tulip versions, OAuth2.0 (Service Account) was called OAuth2 (Admin), and OAuth2.0 (User Credentials) was called OAuth2 (Operator).

Fluxo de código de autorização:

  • OAuth 2.0 (Conta de Serviço): utiliza as credenciais fornecidas durante os testes do conector para todos os usuários no Tulip Player. Ideal para credenciais compartilhadas em toda a sua organização. É necessária uma reautenticação do administrador caso as credenciais expirem.
  • OAuth 2.0 (Credenciais do usuário): segmenta a autenticação com base no usuário conectado ao Tulip Player. Se um usuário não tiver se autenticado ou se a autenticação expirar, ele passará pelo fluxo OAuth dentro do Tulip Player.

Fluxo de credenciais do cliente:

  • OAuth 2.0 (Credenciais do Cliente): Esse tipo de concessão é usado pelo Tulip para obter um token de acesso por meio da autenticação no servidor de autorização usando as credenciais do cliente (ID do cliente e segredo do cliente), normalmente para acessar recursos em nome do próprio cliente, e não em nome de um usuário.

Antes de nos aprofundarmos nos detalhes, sugerimos que você se familiarize com os Ambientes e obtenha uma visão geral dos Hosts de Conectores e suas funções.

O OAuth 2.0 funciona como um mecanismo para que o Tulip (o cliente) comprove sua identidade junto aos sistemas da sua empresa.

Fluxo de código de autorização

:::(Aviso) (Aviso)
Para concluir o processo de autenticação do usuário, seu navegador precisa permitir janelas pop-up. Se o seu connector estiver configurado com vários ambientes, cada ambiente abrirá uma janela pop-up separada durante a autenticação.

Verifique se as janelas pop-up estão habilitadas no Chrome:

  1. Abra o Chrome e clique no menu de três pontos no canto superior direito da janela.
  2. Selecione “Configurações” no menu suspenso.
  3. Role a página para baixo e clique em “Privacidade e segurança”.
  4. Na seção “Privacidade e segurança”, clique em “Configurações do site”.
  5. Role a página para baixo e clique em “Janelas pop-up e redirecionamentos”.
  6. Verifique se a opção está configurada para permitir pop-ups ou adicione manualmente o site à lista de sites autorizados a exibir pop-ups.

Se os pop-ups estiverem bloqueados, o Chrome exibirá um pequeno ícone na barra de endereços sempre que um pop-up for bloqueado. Você pode clicar nesse ícone para permitir rapidamente os pop-ups do Tulip.
:::

O acesso é concedido por meio de um handshake, e o Tulip oferece suporte principalmente ao Fluxo de Código de Autorização, o fluxo OAuth mais comum. Aqui está uma visão geral resumida de como esse fluxo se desenrola:

  1. O usuário inicia o fluxo clicando no botão “Testar” antes de salvar um conector.
  2. O Tulip se comunica com o servidor de autorização do seu provedor OAuth, compartilhando parâmetros específicos, como identidade do cliente, escopos (o que você está tentando acessar) e outros detalhes relevantes.
  3. O servidor de autorização solicita que o usuário conceda acesso, conforme exemplificado abaixo:

  1. Após o consentimento do usuário, o servidor de autorização gera um código de autorização e encerra a janela de autenticação.
  2. Com o código de autorização em mãos, o Tulip solicita um token de forma segura, acessando o endpoint de token e fornecendo o código de autorização, o ID do cliente, o segredo do cliente e propriedades adicionais.
  3. Após validar o código de autorização, o servidor responde com um token e, opcionalmente, um token de atualização. Esse token serve para solicitações autorizadas pelo usuário.
  4. O Tulip agora pode executar solicitações em nome dos usuários, utilizando o token fornecido para autorização.

Consulte os diagramas abaixo para entender o caminho de execução:Token Request

OAuth2 Graphic

Fluxo de credenciais do cliente

O fluxo de credenciais do cliente é usado principalmente para a interação entre dois sistemas de negócios. Esse fluxo é configurado uma vez e, em seguida, compartilhado por todos os usuários.

  1. O usuário inicia o fluxo clicando no botão “Testar” antes de salvar um conector.
  2. O Tulip se comunica com o servidor de autorização do seu provedor OAuth, compartilhando parâmetros específicos, como identidade do cliente, escopos (o que você está tentando acessar) e outros detalhes relevantes.
  3. O servidor de autorização retorna um token de acesso, desde que o ID do cliente e o segredo do cliente estejam corretos. Opcionalmente, um token de atualização também pode ser retornado. Esse token serve para solicitações autorizadas pelo usuário.
  4. O Tulip agora pode executar solicitações em nome dos usuários, utilizando o token fornecido para autorização.

Client Credentials Flow

Configurar o OAuth

On-Prem Services

The Authorize and Token endpoints must be accessible to the cloud for Tulip to execute authentication for connectors.

image.png

URL do código de autorização

Esta é a URL que o Tulip acessa na etapa 2 do fluxo de código de autenticação. Encontrada na documentação da API do seu provedor OAuth, ela geralmente termina em /auth ou /authorize.

Observação: este campo não está presente para credenciais de cliente.

URL do token de acesso

Após a resposta do servidor de autorização, é feita uma solicitação à URL do token de acesso para obter um token para autenticação. Geralmente termina em /token.

ID do cliente e segredo do cliente

Gerado a partir da interface do usuário do seu provedor OAuth, o ID do cliente é enviado junto com a solicitação inicial de um código de autorização. O ID do cliente e o segredo do cliente acompanham todas as solicitações de token.

Tempo de validade padrão (segundos)

Este campo especifica o tempo padrão (em segundos) após o qual os tokens serão atualizados, caso nenhum tempo de validade seja explicitamente fornecido ou definido por meio de outro mecanismo fora do campo expires_in.

Público-alvo e escopo

O público-alvo especifica os ativos específicos aos quais seu usuário deseja acessar, enquanto o escopo define as ações desejadas nesses ativos. Ambos são transmitidos durante a solicitação do código de autorização na etapa 2.

Opções adicionais

  • Enviar dados da solicitação de token como JSON: altera o tipo de codificação da solicitação enviada à URL do token. Habilite se necessário para integrações específicas.
  • Enviar cabeçalho de autenticação para solicitação de atualização: adiciona um cabeçalho extra às solicitações de atualização quando ativado.
  • Ignorar solicitação de consentimento do usuário: controla o atributo de solicitação da solicitação de código de autenticação. Quando desativado, define-o como “consentimento”, enquanto, quando ativado, define-o como “login”, permitindo que o provedor OAuth decida qual tela de login exibir.
Note

For some integrations, exclude or set the prompt attribute to none. Reach out to support@tulip.co for further functionality.

Detalhes técnicos

Aqui estão os detalhes sobre o que o Tulip suporta e como o OAuth é integrado para a autenticação do conector.

NOTE

The Client Credentials flow differs some from the authorization code flow. Steps 1 and 2 are not relevant for the Client Credential flow.

Fluxo de código de autorização do Tulip

On-Prem Services

The Authorize and Token endpoints must be accessible to the cloud for Tulip to execute authentication for connectors

O Tulip inicia o processo de autenticação ao testar um conector ou ao executar uma função de conector dentro de um aplicativo.

1. Redirecionamento para o servidor de autorização

O aplicativo do Tulip redireciona o usuário para o servidor de autorização (AS) juntamente com parâmetros específicos, incluindo o response_type (definido como “code” para o fluxo de código de autorização), client_id (atribuído na interface do conector), redirect_uri (predefinido pelo Tulip), scope e audience (definidos na interface) e state (uma sequência aleatória para proteção contra ataques de falsificação de solicitação entre sites).

Exemplo: GET /authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=SCOPE&audience=AUDIENCE&state=STATE

2. O usuário concede consentimento

O servidor de autorização autentica o usuário e exibe uma tela de consentimento. O usuário pode revisar as permissões solicitadas e decidir se concede ou nega acesso ao aplicativo de terceiros.

:::(Aviso) (Observação)
Na configuração de um determinado connector, o controle “Ignorar solicitação de consentimento do usuário” permite controlar o atributo prompt na solicitação de autorização. Com esse controle desativado, será usado o valor consent; quando ativado, será usado o valor login.

Caso sejam necessários valores adicionais para o atributo prompt, entre em contato com support@tulip.co, e habilitaremos mais opções para essa propriedade.
:::

3. Código de autorização

Se o usuário conceder consentimento, o Servidor de Autorização gera um código de autorização e redireciona o usuário de volta para o Tulip, juntamente com o código de autorização. O parâmetro “state” também é incluído, permitindo que o cliente verifique a integridade da resposta. Esse parâmetro “state” deve corresponder ao parâmetro “state” passado na Etapa 1.

Exemplo de redirecionamento para o URI de redirecionamento do cliente:

REDIRECT_URI?code=AUTHORIZATION_CODE&state=STATE

4. Solicitação de token

O cliente agora possui o código de autorização e o utiliza para fazer uma solicitação segura, de servidor para servidor, ao endpoint de token do Servidor de Autorização. O cliente inclui o grant_type (definido como “authorization_code”), client_id, client_secret (um segredo conhecido apenas pelo cliente e pelo Servidor de Autorização), redirect_uri e o código de autorização.

Exemplo de solicitação de token:


grant\_type=authorization\_code&code=AUTHORIZATION\_CODE&redirect\_uri=REDIRECT\_URI&client\_id=CLIENT\_ID&client\_secret=CLIENT\_SECRET```

### 5. Resposta do token de acesso:

Se o código de autorização for válido, o servidor de autorização responde com um token de acesso e, opcionalmente, um token de atualização. O token de acesso é usado pelo cliente para se autenticar ao fazer solicitações à API protegida em nome do usuário.

**Exemplo de resposta com token:**

`{ "access_token": "ACCESS_TOKEN", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "REFRESH_TOKEN", "scope": "SCOPE"}`

:::(Warning) (Services Not Using `expires_in`)
  
If the token's expiration time is not provided via the `expires_in` key, the "Default Expiration Time (seconds)" field in the authentication configuration will be used to automate token renewal.  
:::

### 6. Acessando o servidor de recursos

O Tulip agora pode usar o token de acesso obtido para fazer solicitações autorizadas ao servidor de recursos (API) em nome do usuário. O token de acesso geralmente é incluído no cabeçalho Authorization da solicitação HTTP.

**Exemplo de solicitação de API:**`GET /api/resource Authorization: Bearer ACCESS_TOKEN`

## Gerencie a expiração do token com tokens de atualização

Os servidores de autorização normalmente definem datas de validade para os tokens a fim de regular o acesso, com prazos de validade variáveis dependendo do sistema conectado. No entanto, tokens de curta duração representam um desafio, pois a autenticação constante do usuário prejudica a experiência do usuário nos aplicativos do Tulip.

Para resolver essa questão, o OAuth oferece suporte a tokens de atualização. Embora sejam opcionais, eles são altamente recomendados, pois otimizam a experiência do usuário, permitindo que o Tulip atualize os tokens de forma contínua, sem exigir intervenção manual dos operadores.

### Como o Tulip gerencia a atualização de tokens?

Quando o Tulip detecta que um token de acesso expirou, ele tenta automaticamente usar o token de atualização associado para obter um novo token. O objetivo principal é minimizar a reautenticação do usuário. As etapas a seguir descrevem a lógica executada pelo Tulip:

![Token Refresh Flow](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28399%29.png)

**1. Detecção de expiração:** - O Tulip identifica um token expirado com base em seu atributo `` `expires_in` ``, recebido na [etapa 5](/r230/docs/oauth20-configuration-and-technical-details#5-access-token-response) do fluxo de autenticação.

:::(Warning) (Services Not Using `expires_in`)
  
If the token's expiration time is not provided via the `expires_in` key, the "Default Expiration Time (seconds)" field in the authentication configuration will be used to automate token renewal.  
:::

**2. Tentativa de fluxo de tokens:** - O Tulip inicia o fluxo de tokens usando o tipo de concessão `` `refresh_token` ``, substituindo o tipo de concessão usado no fluxo de autenticação inicial.

**3. Validação do token:** - Se um novo token for obtido, o Tulip o armazena e prossegue com a execução da ação solicitada pelo usuário ( connector function). - Se for bem-sucedido, os dados são fornecidos ao ambiente de execução do aplicativo Tulip. - Se o novo token falhar com um erro OAuth, o Tulip repete o processo até 5 vezes, voltando à etapa 1 a cada vez. - Se o novo token falhar com qualquer outro erro, um erro é exibido no ambiente de execução do player.

**4. Tratamento da ausência de token:** - Se um novo token não for fornecido, o Tulip solicita ao usuário no player que realize a autenticação, iniciando todo o processo de autenticação. - Após a conclusão, a função connector function é executada e os dados são retornados.

Ao implementar tokens de atualização, o Tulip garante uma experiência de usuário mais fluida, gerenciando de forma inteligente a expiração e a renovação dos tokens, minimizando interrupções no fluxo de trabalho.

---

Você encontrou o que estava procurando?

Você também pode acessar [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all) para postar sua pergunta ou ver se outras pessoas já tiveram uma dúvida semelhante!