# Configure um paywall com a integração JWT

A function JWT é uma integração *serverless* do Azion Marketplace para processar e validar tokens JWT (*JSON Web Token*). Ela pode ser usada para criar soluções de paywall que permitam controlar o acesso a conteúdo por assinatura.

Com esse sistema, a aplicação otimiza as operações e reduz a carga de processamento na infraestrutura do cliente, identificando diretamente no edge se a pessoa que tenta acessar uma determinada página está autorizada ou não.

Alguns outros benefícios da integração JWT são:

1. Fornece flexibilidade de desenvolvimento de aplicativos para o cliente.
2. Processa os tokens em uma infraestrutura distribuída de edge nodes.
3. Proporciona capacidade de execução de regras de negócios no edge.

---

## Como funciona a integração JWT

Em uma implementação de paywall utilizando a integração JWT, a aplicação de origem e a função no edge têm papéis diferentes:

**Aplicação de origem**: determina a lógica em torno de como o token é gerado e quando ele irá expirar. Também determina como o acesso do usuário é controlado, como qual método de autenticação é usado (OAUTH, OpenID Connect, etc.), o número de tentativas de acesso ou bytes que o cliente pode usar antes de ser solicitado a fazer login ou a quantidade de tempo que o cliente pode navegar sem autorização adicional (expiração).

O token usa um padrão da indústria para autenticação HTTP, o **Bearer Authentication Scheme (Esquema de Autenticação de Portador)**, que armazena objetos `JSON` com informações de autenticação que devem ser adicionadas ao cabeçalho de cada solicitação.

**Edge ⁠Function JWT**: valida o token gerado pelo aplicativo para cada solicitação recebida e enviada pelo usuário. A função segue as regras de negócios definidas no token, e pode combiná-las com outros elementos no edge para definir qual comportamento deve ser aplicado, permitindo acesso ou redirecionamento para o aplicativo, geralmente uma página de logon/login.

---

## Configuração da função JWT

A function JWT está disponível no Marketplace da Azion e pode ser acessada através do [Azion Console](https://console.azion.com), no **Products menu**, localizado no canto superior esquerdo da página inicial do Console e indicado pelas três linhas horizontais.

Para ser executada, a função deve ser instanciada em uma application. Seus critérios de ativação e comportamento também devem ser definidos dentro do **Rules Engine**, de acordo com a abordagem já configurada no aplicativo de origem (por exemplo, versões proprietárias do OAuth, OpenID, etc., ou versões de mercado, como Auth0, Keycloak, etc.).

---

## Criação de uma instância

Para criar uma função JWT, você pode consultar o guia sobre [Como instalar a integração JWT através do Marketplace da Azion](/pt-br/documentacao/produtos/guias/jwt/).

**Parâmetros**: uma vez que você selecionou a função JWT em sua application, um formulário com o código-fonte aparecerá no campo **Code**, que é apenas para fins informativos e você não pode alterá-lo. Na aba **Args**, você passará a lista de pares de KIDs (*Key IDs*) e as chaves secretas usadas para gerar a assinatura do token e salvar a função.

A lista de pares é definida em sua aplicação de origem, como no exemplo abaixo:

```json
[{
	"kids": {
    	"4546D4AA7F62F01A833A7ABE354030E7": "D6CB2342E44EFB6DD628276F36DA2359",
    	"D6CB2342E44EFB6DD628276F36DA2359": "60BD8ED7A768E8BD6925BEB0A691AADB",
    	"60BD8ED7A768E8BD6925BEB0A691AADB": "4546D4AA7F62F01A833A7ABE354030E7"
  	}
}]
```

---

## Definição das regras no Rules Engine

As regras do **Rules Engine** determinarão o conjunto de condições que precisam ser atendidas para que os *behaviors* (comportamentos) sejam executados. Você pode usar a **Default Rule** ou criar uma nova regra.

### Definição dos criteria (critérios) de validação

Escolha as variáveis, os operadores de comparação e as strings para criar sua regra de negócio, como no exemplo a seguir:

`If: ${uri} starts with /news`

> Lógica: operador lógico, variável, operador de comparação, string.

Aqui, a regra é executada se uma URL começar com a string `/news`.

### Definição dos behaviors (comportamentos)

Adicione os *behaviors* (comportamentos) que você deseja que sejam realizados quando as condições da regra forem atendidas. Exemplo:

`Then Run Function` e escolha **JWT**, ou qualquer outro nome que você deu para a sua função.

> Lógica: operador lógico, ação, função.

Neste exemplo, se as condições definidas nas regras forem satisfeitas, a função **JWT** será executada.

:::note
Um código de erro será retornado se o token recebido for inválido. A função retornará um código de status HTTP 400 ou 401, dependendo do erro.
:::

Por fim, salve sua application e a sua função estará pronta.

---