# Modelo de integração OAuth2 com a Digibee

Este documento apresenta um modelo de implementação de fluxo OAuth2 para autenticação e autorização em integrações realizadas na Digibee Integration Platform. O objetivo é garantir o acesso seguro a APIs protegidas, utilizando tokens de acesso e refresh tokens quando aplicável.

Você aprenderá o padrão de implementação do fluxo de autenticação OAuth2 na Digibee, incluindo:

* Etapas de geração de credenciais
* Obtenção do token
* Renovação (refresh) do token
* Remoção de credenciais

{% hint style="info" %}
**Observações importantes:**

* O pipeline deve ser configurado com, no mínimo, duas execuções simultâneas (Digibee Execution Config) para garantir o correto funcionamento do mecanismo, já que ele realiza uma autochamada para gerar o token.
* O fluxo de OAuth2 segue o padrão de autorização `client_credentials`, adequado para integrações entre sistemas, sem interação humana.
* A renovação (refresh) do token é realizada automaticamente antes da expiração, garantindo que um token válido esteja sempre disponível para uso.
  {% endhint %}

## **Arquitetura**

### **Visão geral**

Diagrama:

{% @mermaid/diagram content="flowchart LR
A\[Sistema externo] --> B\[Pipeline OAuth2]
B --> C\[Criação de credenciais]
C --> D\[Obtenção do token de acesso]
D --> E\[Renovação do token]
E --> F\[Exclusão de credenciais]" %}

Pipeline:

<figure><img src="/files/LqBJFd17Fq6YskJSm1AT" alt=""><figcaption></figcaption></figure>

### **Descrição**

* Os pipelines implementam um fluxo completo de autenticação OAuth2, permitindo:
  * Criação de credenciais
  * Obtenção do token de acesso
  * Renovação (refresh) do token
  * Exclusão de credenciais
* O pipeline responsável pode ser acionado tanto para geração inicial do token quanto para renovação ou gestão das credenciais, de acordo com os parâmetros de entrada.
* Esse mecanismo pode ser reutilizado por outros pipelines de negócio por meio de chamadas de evento, API ou encapsulamento em cápsulas.

### **Fluxo detalhado**

1. **Geração de credenciais**
   * Cria um par `clientId` e `clientSecret` para futuras autenticações.
2. **Obtenção de token**
   * Gera o token de acesso (`access_token`) e o `refresh_token`.
3. **Renovação de token**
   * Renova o token de acesso utilizando o `refresh_token` antes da expiração.
4. **Remoção de credenciais**
   * Remove as credenciais (`clientId`) do sistema de autenticação.

### **Payloads**

#### **1. Geração de credenciais**

Request:

```json
{
    "partnerId": "TestSistema",
    "executionType": "create",
    "apikey": "..."
}
```

​Response:

```json
{
    "clientId": "clientId",
    "clientSecret": "clientSecret"
}
```

#### **2. Obtenção do token**

Request:

```json
{
    "password": "clientSecret",
    "grant_type": "client_credentials",
    "username": "clientId"
}
```

Response:

```json
{
    "token_type": "Bearer",
    "expires_in": 3600000,
    "ext_expires_in": 3600000,
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9..."
}
```

#### **3. Renovação (refresh) do token**

Request:

```json
{
    "grant_type": "refresh_token",
    "refresh_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9..."
}
```

Response:

```json
{
    "token_type": "Bearer",
    "expires_in": 3600000,
    "ext_expires_in": 3600000,
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9..."
}
```

#### **4. Exclusão de credenciais**

Request:

```json
{
    "clientId": "clientId",
    "executionType": "delete",
    "apikey": "..."
}
```

Response:

```json
{
    "code": 200,
    "message": "Success when deleting client credentials for the clientId: clientId"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/resources/pt-br/best-practices/oauth2-integration-model-with-digibee.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
