---
name: azion-configure-um-paywall-com-a-funcao-jwt
description: >-
  Valide um JSON Web Token em cada requisição a conteúdo restrito e controle o acesso por assinatura com a função JWT do Azion Marketplace.
---

# Configure um paywall com a função JWT

Um paywall construído com a função JWT tem duas partes: uma instância de função que valida o token e uma regra do Rules Engine que executa a instância no conteúdo que você restringe. A função JWT é uma solução serverless disponível no Azion Marketplace.

A aplicação de origem gera o token e define sua expiração. Ela também determina como o acesso é controlado:

- O método de autenticação, como OAuth, OpenID Connect, Auth0 ou Keycloak.
- O número de tentativas de acesso ou de bytes que um visitante consome antes de precisar fazer login.
- Por quanto tempo um visitante navega sem autorização adicional.

O token segue o Bearer Authentication Scheme, o padrão de autenticação HTTP. Cada requisição carrega no cabeçalho um objeto JSON com as informações de autenticação.

A função JWT valida esse token em cada requisição que a aplicação recebe. Ela segue as regras de negócio definidas no token e essas regras se combinam com os critérios que você define no Rules Engine. O resultado determina o comportamento aplicado: a requisição alcança o conteúdo ou vai para a página de login da aplicação de origem. A validação acontece antes de a requisição chegar à origem, então a origem não processa uma requisição não autorizada.

---

## Pré-requisitos

- Uma aplicação. Para criar uma, consulte [Primeiros passos com Applications](/pt-br/documentacao/plataforma/applications/primeiros-passos/).
- A função JWT instalada na conta. Para instalar, consulte [Use a integração JWT no Azion Marketplace](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/integracoes/jwt/).
- A lista de pares de KID e chave secreta que a aplicação de origem usa para assinar o token.

---

## Instancie a função JWT na aplicação

Uma aplicação executa uma função por meio de uma instância de função e a instância carrega os Args passados para o contexto de execução. Para o procedimento completo em Azion Console e na Azion API, consulte [Instancie uma função em uma aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/instanciar-functions/).

O formulário da instância mostra o código-fonte da função no campo **Code**. Esse campo é informativo e você não pode alterá-lo. A aba **Args** recebe a lista de pares de KID (key ID) e chave secreta que geram a assinatura do token.

A aplicação de origem define os pares. Para passá-los para a instância:

1. **Vá para a aba Args**

2. **Insira os pares de KID e chave secreta**

   Insira os pares neste formato:

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

3. **Selecione Save**

A instância aparece na aba **Functions Instances** da aplicação. Ela não é executada até que uma regra do Rules Engine a selecione.

---

## Adicione a regra que executa a função

Uma regra define as condições que uma requisição atende para que seus comportamentos sejam executados. Um critério é formado por operador lógico, variável, operador de comparação e string. Um comportamento é formado por operador lógico, ação e função. O comportamento que executa a função vai na **Default Rule** da aplicação ou em uma regra que você criar. Ajuste os critérios aos caminhos que você vende por assinatura e à autenticação que a aplicação de origem já usa.

Para colocar o comportamento em uma nova regra:

1. **Abra a aplicação**

   Acesse [Azion Console](https://console.azion.com/) > **Applications** > **sua aplicação**.

2. **Vá para a aba Rules Engine**

3. **Selecione + Rule**

4. **Nomeie a regra**

   Insira um nome para a regra. Por exemplo: `Paywall on news`.

5. **Selecione Request Phase**

6. **Selecione a variável na seção Criteria**

   Na seção **Criteria**, selecione a variável `${uri}`.

7. **Selecione starts with como operador de comparação**

8. **Insira a string**

   Insira `/news` como string. O critério fica `If ${uri} starts with /news`.

9. **Na seção Behaviors, selecione Run Function**

10. **Selecione a instância JWT**

    Selecione a instância que você nomeou ao instanciar a função.

11. **Selecione Save**

A regra executa a função JWT em toda requisição cuja URI começa com `/news`. Novas regras podem levar alguns minutos para propagar.

> **nota**
>
> A função retorna um código de status HTTP `400` ou `401` quando o token recebido é inválido. O código depende do erro.

---

## Próximos passos

- [Instancie uma função em uma aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/instanciar-functions.md): Os procedimentos da instância em Azion Console e na Azion API e as regras que governam os Args.
- [Rules Engine para Applications](/pt-br/documentacao/plataforma/applications/rules-engine.md): Cada variável, operador de comparação e comportamento que uma regra pode carregar.
- [Crie uma regra de aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/trabalhar-com-rules-engine.md): Adicione, ordene e edite as regras de uma aplicação.
- [Use a integração JWT no Azion Marketplace](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/integracoes/jwt.md): Instale JWT a partir do Azion Marketplace e execute em um firewall.
