# JWT V2

O **JWT V2** permite a criação de *tokens* JWS e JWE. O componente também realiza a verificação de *tokens* JWS e decodificação de *tokens* JWE.

Dê uma olhada nos parâmetros de configuração deste componente:

* **Operation:** a operação que será realizada pelo componente. As opções são:
  * **Generate JWS:** realiza a criação de *tokens* JWS.
  * **Generate JWE:** realiza a criação de *tokens* JWE.
  * **Verify JWS:** verifica a assinatura de um *token* JWS.
  * **Decode JWE:** descriptografa o *token* JWE e retorna o *payload* desse *token*.
* **Public Key:** conta do tipo *public key* utilizada para verificar *tokens* JWS e criptografar *tokens* JWE. Para algoritmos baseados em RSA, é esperada uma *public key* do tipo RSA (derivada de uma *secret key* de no mínimo 2048 bits). Para algoritmos baseados em EC, é esperada uma *public key* do tipo EC com a respectiva configuração de Curva (*Curve*). Veja a seguir a lista de algoritmos disponíveis para este parâmetro:

| Public Key          | RSA                                                                      | EC                                                                               |
| ------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------- |
| Algoritmos para JWS | <p>RS256</p><p>RS384</p><p>RS512</p><p>PS256</p><p>PS384</p><p>PS512</p> | <p>ES256</p><p>ES384</p><p>ES512</p><p>ES256K</p>                                |
| Algoritmos para JWE | <p>RSA1\_5</p><p>RSA-OAEP </p><p>RSA-OAEP-256</p>                        | <p>ECDH-ES </p><p>ECDH-ES+A128KW </p><p>ECDH-ES+A192KW </p><p>ECDH-ES+A256KW</p> |

* **Private Key:** conta do tipo *private key* utilizada para assinar *tokens* JWS e descriptografar *tokens* JWE. Para algoritmos baseados em RSA, é esperado uma *private key* do tipo RSA de no mínimo 2048 bits. Para algoritmos baseados em EC, é esperado uma *private key* do tipo EC com a respectiva configuração de Curva (*Curve*). Veja a seguir a lista de algoritmos disponíveis para este parâmetro:

| Private Key         | RSA                                                                      | EC                                                                               |
| ------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------- |
| Algoritmos para JWS | <p>RS256</p><p>RS384</p><p>RS512</p><p>PS256</p><p>PS384</p><p>PS512</p> | <p>ES256</p><p>ES384</p><p>ES512</p><p>ES256K</p>                                |
| Algoritmos para JWE | <p>RSA1\_5</p><p>RSA-OAEP </p><p>RSA-OAEP-256</p>                        | <p>ECDH-ES </p><p>ECDH-ES+A128KW </p><p>ECDH-ES+A192KW </p><p>ECDH-ES+A256KW</p> |

* **Certificate Chain:** conta tipo *Certificate-chain* que permite a extração de uma *private key* de seu conteúdo e seu uso com o mesmo objetivo do parâmetro **Private Key** (isto é, assinar *tokens* JWS e descriptografar *tokens* JWE). Você precisa apenas configurar um dos dois parâmetros: **Private Key** ou **Certificate Chain**.
* **Secret Key:** conta do tipo *secret key* utilizada para assinar/verificar tokens JWS e criptografar/descriptografar tokens JWE. Veja a seguir a lista de algoritmos disponíveis para este parâmetro:

| Secret Key          | HMAC                                 | AES                                       | AES GCM                       |
| ------------------- | ------------------------------------ | ----------------------------------------- | ----------------------------- |
| Algoritmos para JWS | <p>HS256</p><p>HS384</p><p>RS512</p> |                                           |                               |
| Algoritmos para JWE |                                      | <p>A128KW </p><p>A192KW </p><p>A256KW</p> | A128GCMKW A192GCMKW A256GCMKW |

* **Custom Account (custom.account-1):** usada para referenciar as informações de uma conta configurada em algumas declarações de *token* através de *Double Braces* ao gerar um *token JWS*. No momento, essa referência está disponível apenas para **Issuer (iss)** e **Custom Claims**.
* **Key as Base64:** se esta opção estiver ativada, a conta *secret key* deverá estar no formato base64; do contrário, deverá conter o valor da chave a ser utilizada. Esse parâmetro será visível apenas se uma conta *secret key* for utilizada.
* **Key Charset:** o *charset* da chave. Disponível se **Key as Base64** estiver ativada.
* **JWS Algorithm (JWA):** o algoritmo utilizado para assinar e verificar *tokens* JWS. As opções são: HS256, HS384, HS512, RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, ES256K e EdDSA (*JWK only*). Esse parâmetro não fica disponível se **Verify JWS** estiver configurado no parâmetro **Operation** e se **Use JWK** estiver ativado.

{% hint style="info" %}
**IMPORTANTE:** o algoritmo EdDSA funciona apenas quando um *token* JWK é utilizado.
{% endhint %}

* **JWE Algorithm (JWA):** o algoritmo utilizado para criptografar e descriptografar *tokens* JWE. As opções são: A128KW, A192KW, A256KW, A128GCMKW, A192GCMKW, A256GCMKW, RSA1\_5, RSA-OAEP, RSA-OAEP-256, ECDH-ES, ECDH-ES+A128KW, ECDH-ES+A192KW e ECDH-ES+A256KW. Esse parâmetro não fica disponível se **Decode JWE** estiver configurado no parâmetro **Operation** e se **Use JWK** estiver ativado.
* **Set algorithm from JWK:** se esta opção estiver ativada, o componente utilizará o algoritmo configurado no JWK para manipular os tokens JWT. Esse parâmetro será visível apenas se **Use JWK** for ativado.
* **Content Encryption Algorithm:** o algoritmo utilizado para criptografar e descriptografar o *payload* dos *tokens* JWE. As opções são: A128CBC-HS256, A192CBC-HS384, A256CBC-HS512, A128GCM, A192GCM e A256GCM.
* **Issuer (iss):** a *claim* "iss" (*issuer*) identifica o emissor do JWT. O processamento dessa *claim* é geralmente específico da aplicação. O uso dessa *claim* é opcional. É possível referenciar uma **Custom Account** usando *Double Braces* para configurar essa *claim*.
* **Expiration Time (exp):** a *claim* "exp" (*expiration time*) identifica o tempo de expiração no qual ou após o qual o JWT não deve ser aceito para processamento. O processamento da solicitação "exp" exige que a data/hora atual sejam anteriores à data/hora de vencimento listada na solicitação "exp". O uso dessa *claim* é opcional.
* **Issued at (iat)**: a *claim* "iat" (*Issued at*) identifica a hora em que o JWT foi emitido (formato *timestamp*). Essa declaração pode ser utilizada para determinar a idade do JWT. O seu valor deve ser um número. O uso dessa *claim* é opcional.
* **Subject (sub):** a *claim* "sub" (*subject*) identifica o assunto do JWT. As afirmações em um JWT são normalmente afirmações sobre o assunto. O valor do assunto deve ter como escopo ser exclusivo localmente no contexto do emissor ou ser globalmente exclusivo. O processamento dessa *claim* é geralmente específico da aplicação. O uso dessa *claim* é opcional.
* **Token Id (jti):** a *claim* "jti" (JWT ID) fornece um identificador exclusivo para o JWT. O valor do identificador deve ser atribuído para diminuir as chances de que o mesmo valor seja acidentalmente atribuído a um objeto de dados diferentes. Se o aplicativo utilizar vários emissores, você também pode evitar colisões entre os valores produzidos por diferentes emissores. Use a *claim* "jti" para evitar que o JWT seja repetido. O uso dessa *claim* é opcional.
* **Audience (aud):** valor único. A *claim* "aud" (*audience*) identifica os destinatários do JWT. Cada destinatário que pretende processar o JWT deve se identificar com um valor dentro da *claim*. Se destinatário não se identificar com um valor na *claim* "aud" quando essa *claim* estiver presente, o JWT deve ser rejeitado. O uso dessa *claim* é opcional.
* **Not Before (nbf):** a *claim* "nbf" (*not before*) identifica o tempo antes do qual o JWT não deve ser aceito para processamento. O processamento da reclamação "nbf" requer que a data/hora atual (formato *timestamp*) seja posterior ou igual à data/hora listada na reclamação "nbf". Os implementadores podem prever uma pequena margem de segurança - geralmente não mais do que alguns minutos - para compensar a distorção do relógio. O seu valor deve ser um número. O uso dessa *claim* é opcional.

{% hint style="info" %}
**IMPORTANTE:** para os parâmetros **Expiration Time, Issued at** e **Not Before**, você sempre deve inserir os dados em milissegundos. Embora este formato seja obrigatório nesses casos, o conteúdo JWT contém o valor em segundos com base nos padrões JWT (*JSON Web Token*).
{% endhint %}

* **Custom Claims:** para especificar *claims* customizadas, informe a chave (nome da *claim*) e o valor da *claim*. É possível referenciar uma **Custom Account** usando *Double Braces* para o valor *claim*.
* **Custom Headers:** para especificar *headers* customizados, informe a chave e o valor do *header* nos respectivos campos.
* **JWE:** o *token* JWE.
* **JWS:** o *token* JWS.
* **Payload Charset**: *charset* do *payload* utilizado na criação de *tokens* JWE. Valor padrão: UTF-8.
* **Payload**: *payload* que será utilizado na criação do *token* JWE.
* **Use JWK:** se a opção estiver ativada, um JWK é esperado para assinar/verificar o *token* JWS ou criptografar/descriptografar o *token* JWE. O **Use JWK** também desabilita todas as opções de conta (parâmetros **Secret Key, Private Key** e **Public Key**), além dos parâmetros **Key Charset e Key as Base64**. Caso **Decode JWE** seja selecionada em **Operation**, o parâmetro **Encrypted Payload Algorithm** também será desativado.
* **JWK:** JWK que será utilizado na assinatura ou verificação do *token* JWS e na criptografia ou descriptografia do *token* JWE.
* **Fail On Error:** se a opção estiver habilitada, a execução do *pipeline* com erro será interrompida; do contrário, a execução do *pipeline* continua, mas o resultado vai mostrar um valor falso para a propriedade "success".

{% hint style="info" %}
**IMPORTANTE:** alguns algoritmos exigem chaves com configurações específicas (*public, private* ou *secret key*), como é o caso dos algoritmos HMAC e EC para *tokens* JWS. O algoritmo HS256, por exemplo, exige uma *secret key* de 256+ bits, enquanto o algoritmo ES384 espera uma *public key* configurada com Curva (*Curve)* P-384. Fique atento ao fazer esse tipo de configuração para garantir que os *tokens* JWT sejam manipulados de maneira correta.

O componente **JWT V2** segue as especificações e padrões JWT (*JSON Web Token*) e JOSE (*Javascript Object Signing and Encryption*). Configurações fora dessas especificações e padrões não são suportadas pelo componente.
{% endhint %}

Alguns dos parâmetros acima aceitam *Double Braces*. Para entender melhor como funciona essa linguagem, [leia a documentação sobre Double Braces](/documentation/connectors-and-triggers/pt-br/double-braces/overview.md).

## **Fluxo de mensagens**

### **Entrada**

Não é esperado uma mensagem de entrada específica, bastando apenas preencher os campos necessários de cada operação.

### **Saída**

### **Operação Generate JWS**

```
{
"success": true,
"jws": "<JWS TOKEN>",
}
```

### **Operação Generate JWE**

```
{
"success": true,
"jwe": "<JWE TOKEN>",
}
```

### **Operação Verify JWS**

```
{
"success": true,
"verified": true,
"claims": [
"subject": ".....",
"issuedAt": 11111111
]
}
```

### **Operação Decode JWE**

```
{
"success": true,
"payload": "<PAYLOAD DESCRIPTOGRAFADO>"
}
```


---

# 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/connectors-and-triggers/pt-br/connectors/security/jwt.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.
