# Proteja suas APIs com JWT na Digibee

Os JSON Web Tokens (JWTs) permitem a troca segura de informações entre diferentes partes. Ao incorporar JWTs, você pode **autenticar usuários e autorizá-los a acessar recursos específicos ou realizar ações dentro de um serviço.**

Neste caso de uso, vamos explorar:

* Melhores práticas para implementar JWTs com segurança.
* Como evitar erros comuns, como incluir dados sensíveis nos tokens.
* Etapas práticas para utilizar os conectores JWT na Digibee Integration Platform.

## Melhores práticas com JWT

Aqui estão algumas práticas importantes a serem seguidas:

**Evite incluir dados sensíveis nos JWTs:** Apesar de os dados no token serem codificados em base64, eles não são criptografados nem protegidos com hash. Isso significa que qualquer pessoa com acesso pode decodificar e visualizar o conteúdo do *Header* e do *Payload*, excluindo a *Signature*.

**Use tempos de expiração curtos:** Os JWTs devem ter períodos de expiração curtos para minimizar o risco de uso malicioso caso o token seja comprometido. Um token de curta duração limita o impacto de sua exposição. O tempo de expiração pode ser configurado diretamente nas configurações do conector.

**Monitore o uso dos tokens**: É importante monitorar o uso dos JWTs para detectar anomalias ou tentativas de acesso não autorizadas. Você pode registrar e rastrear o uso de cada token associando-o à chave de execução do pipeline: `{{ metadata.execution.key }}`.

**Utilize escopos quando o acesso precisar ser restrito:** Inclua escopos para aplicar permissões granulares ou validar o acesso a papéis ou recursos específicos. Por exemplo, se um token for destinado a operações sensíveis, certifique-se de que os escopos apropriados estejam definidos (leitura, escrita, etc.).

## JWT na Digibee Integration Platform

<figure><img src="https://content.gitbook.com/content/XfrDexGOLMin51pAiWkq/blobs/5NLkfTGeBL4M6xHgQzSl/Digibee%20JWT.png" alt=""><figcaption><p>Configuração do conector Digibee JWT (Generate and Decode).</p></figcaption></figure>

A Digibee oferece dois conectores distintos de JWT, cada um projetado para casos de uso específicos: [JWT V2](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/security/jwt) e [Digibee JWT (Generate and Decode)](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/security/digibee-jwt). Ambos possibilitam integração e segurança dentro dos pipelines, mas diferem em capacidades e foco de aplicação.

1. [JWT V2](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/security/jwt) é um conector que suporta a geração de **JWTs genéricos para sistemas externos**. Ele permite criar tokens JWS (*JSON Web Signature*) e JWE (*JSON Web Encryption*), além de verificá-los e decodificá-los. O JWT V2 acomoda diversos algoritmos criptográficos para uso de chaves públicas, privadas e secretas.
2. [Digibee JWT (Generate and Decode)](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/security/digibee-jwt) é um conector voltado para comunicações internas da plataforma. Ele simplifica a geração e decodificação de tokens JWT, com foco em autenticação em pipelines que utilizam REST ou HTTP Triggers, **sendo exclusivo do ecossistema Digibee**.

### Quando usar cada conector

| Conectores                | JWT V2                         | Digibee JWT                                  |
| ------------------------- | ------------------------------ | -------------------------------------------- |
| **Caso de uso**           | Integrações externas com APIs  | Comunicação interna nos pipelines da Digibee |
| **Tipos de token**        | JWS, JWE                       | JWT                                          |
| **Algoritmos suportados** | Suporte criptográfico amplo    | Simplificado para uso interno                |
| **Ideal para**            | Necessidades de alta segurança | Autenticação leve em pipelines internos      |

## Compreendendo o Fluxo de Autenticação JWT

<figure><img src="https://content.gitbook.com/content/XfrDexGOLMin51pAiWkq/blobs/3UaVqProj4itm3Qrpxcu/diagrama_JWT.png" alt=""><figcaption></figcaption></figure>

1. ### Ações do Usuário

O processo começa quando o usuário envia uma **solicitação POST** para `/auth` no **AuthenticationLoginPipeline** com suas credenciais (**API Key** ou **Basic Auth**).&#x20;

Após a autenticação bem-sucedida, o **AuthenticationLoginPipeline** retorna o token JWT **nos cabeçalhos da resposta**. Esse token deve ser incluído no **Authorization Header** de solicitações subsequentes para acessar endpoints protegidos (por exemplo, GET `/protected-resource`).

2. ### Papel do ServicePipeline

O **ServicePipeline** é responsável por validar o token JWT durante as solicitações subsequentes. Este pipeline opera com as seguintes etapas:

* **Validação de JWT:** Quando o usuário envia uma solicitação com um token JWT no Authorization header, o **ServicePipeline** valida o token. O **API Gateway** da Digibee é responsável por aplicar a validação do token. Se o token for válido, o ServicePipeline prossegue com o processamento da solicitação.
* **Controle de Acesso:** Caso o token JWT seja inválido ou ausente, o API Gateway bloqueia o acesso ao **ServicePipeline**, garantindo que apenas usuários autorizados possam acessar os recursos protegidos.

## Colocando em prática

O caso de uso a seguir ilustra as fases de como utilizar o conector **JWT (Generate and Decode)** para criar um pipeline de autenticação de login que gera um token JWT para acesso a APIs internas. Esta implementação prática segue o fluxo do **AuthenticationLoginPipeline** discutido anteriormente. Aqui está a implementação passo a passo:

### Configure o Trigger

1\. Crie um novo pipeline e adicione um [Trigger REST](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/web-protocols/rest).

2\. Nas configurações do trigger, habilite as opções: **External API** e **API Key**.

### Extraia dados relevantes

1. Use um **conector de transformação** para processar o corpo da solicitação recebida.
2. Extraia os campos necessários para o payload do JWT, como:

* `userID`
* `role`
* Outros identificadores necessários para autorização.

{% hint style="info" %}
**Dica de Segurança:** Exclua informações sensíveis (por exemplo, senhas ou detalhes de transações).
{% endhint %}

### Armazene os dados extraídos

1. Salve os dados extraídos na memória de execução do pipeline usando o conector [Session Management](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/structured-data/session-management). Isso garante que os dados estejam acessíveis para as etapas subsequentes do pipeline.

### Limpe campos do payload

1. Se informações sensíveis estiverem presentes no payload, remova-as antes de prosseguir (um [JSON Generator](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/tools/json-generator) vazio pode ser usado para isso).
2. Mantenha apenas os campos essenciais para o payload do JWT.

### Gere o JWT

1. Adicione o conector [Digibee JWT (Generate and Decode)](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/security/digibee-jwt) ao seu pipeline.
2. Configure os seguintes parâmetros:

* **Tipo de Operação:** Selecione **Generate** para criar o token JWT.
* **Scopes:** Opcionalmente, defina escopos para especificar permissões ou níveis de acesso (por exemplo, leitura, escrita). Deixe este campo vazio se não for necessário.
* **Tempo de Expiração:** Defina um período de validade para o token.

{% hint style="info" %}
Certifique-se de que o pipeline está implantado em um ambiente de teste ou produção antes de tentar gerar ou recuperar o JWT.
{% endhint %}

### Crie um Transaction ID (Opcional)

Para melhorar a rastreabilidade, gere um **Transaction ID** exclusivo para o fluxo. Por exemplo, use a chave de execução do pipeline: `{ "transactionId": {{ metadata.execution.key }} }`

### JWT no Authorization header

* O JWT gerado será adicionado ao **Authorization header** da resposta.
* Este token pode agora ser usado por outros serviços para realizar chamadas autenticadas à API.

<figure><img src="https://content.gitbook.com/content/XfrDexGOLMin51pAiWkq/blobs/Py9ZF2Yr9M3YBJvOWieH/pipeline_JWT.png" alt=""><figcaption><p>Esta imagem ilustra um pipeline de geração de JWT, destacando as etapas principais conforme descrito na implementação acima.</p></figcaption></figure>

## Considerações finais

A segurança é uma responsabilidade compartilhada entre todas as equipes envolvidas no desenvolvimento de integrações. Cada membro da equipe desempenha um papel na implementação e manutenção de práticas de segurança para minimizar riscos e construir integrações seguras e confiáveis.

Se você é novo nos conceitos de segurança, recomendamos explorar o caso de uso ["Práticas essenciais para proteger informações sensíveis"](https://docs.digibee.com/documentation/resources/pt-br/use-cases/key-practices-for-securing-sensitive-information), que aborda princípios fundamentais para a proteção de dados. Isso complementará sua compreensão sobre a implementação de JWT e aprimorará suas práticas gerais de segurança.

Você pode explorar mais possibilidades em nosso [Portal de Documentação](https://docs.digibee.com/documentation/pt-br), no [Digibee Academy](https://digibee.academy/courses/advanced-security/) com cursos sobre **Segurança Avançada**, ou visitar nosso [Blog](https://www.digibee.com/blog/) para descobrir mais recursos e insights.

Se você tiver um feedback sobre este caso de uso ou sugestões para futuros artigos, adoraríamos ouvir você em nosso [formulário de feedback](https://docs.google.com/forms/d/e/1FAIpQLSd2EnkeEI6TOfgdgJ5gv16Ukozt9oY5Rm2N8X9o5JF4w5kB3Q/viewform).
