JWT – Segurança em APIs REST com o Magic xpi – Parte 2

Veja nesta publicação como validar tokens JWT através do Magic xpi, para adicionar segurança aos serviços REST publicados.

Nesta publicação anterior (que você deve ler antes de prosseguir) nós falamos como gerar e disponibilizar tokens JWT a partir de um projeto Magic xpi.

Agora, vamos abordar a segunda metade da história, e talvez a mais importante: como validar um token recebido.

 

O propósito é que o consumidor da API sempre envie este token no cabeçalho “Authorization” das requisições, ex:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJDbGllbnQxQG1hZ2ljc29mdHdhcmVici5jb20iLCJuYW1lIjoiVXNlcjpDbGllbnQxIiwianRpIjoiOWJiZWMzOTgtMjVkMy00ODc3LWIyMjYtOWE1ODY0MzhlMWQ2IiwiaWF0IjoiMTY4MTY3ODQ3NyIsIm5iZiI6MTY4MTY3ODQ3NywiZXhwIjoxNjgxNjgyMDc3LCJpc3MiOiJNYWdpY3hwaSBieSBNYWdpY1NvZnR3YXJlQlIiLCJhdWQiOiJVc2VyOkNsaWVudDEvR2VuZXJhbCBQdXJwb3NlIn0.ObXxXRSmTfNQ4wj4u8clvNW04rB6tq3bU8n7tYE9O-g

Assim, o provedor pode determinar se quem está consumindo é alguém devidamente autorizado, e também o que ele pode fazer (ter acesso).

 

Como esse token serve de “passe livre” par o acesso à API, é muito importante que algumas ações sejam executadas nessa validação:

  • Verificar se o token está inviolado (a assinatura digital está OK)
  • Verificar se o emissor (iss) do token é você mesmo
  • Verificar se o cliente identificado (sub ou aud) do token é válido e pode ter acesso a esta API
  • Verificar se o acesso ainda está dentro da validade (nbf e exp) de uso deste token
  • Verificar o escopo (total ou parcial) deste cliente aos dados que esta API disponibiliza

 

Por isso, logo no início da lógica da APIs REST publicada, vamos extrair este token dos cabeçalhos HTTP recebidos:

 

É muito importante que em alguma parte do “payload” do token JWT nós tenhamos colocado a identificação do cliente que o solicitou, o seu “Client Application Key(que é uma informação pública).

Pois este token foi assinado com o seu “Client Application Secret Key(que é uma informação privada), e que agora precisa ser recuperado no seu sistema para fazer a validação dessa assinatura:

 

Qualquer falha em qualquer destas etapas, deve interromper o fluxo e retornar um erro a quem invocou a API (geralmente é um retorno HTTP 401 ou HTTP 400).

Tendo então sucesso em identificar o “Client Application Key” e resgatar o seu “Client Application Secret Key“, é necessário validar a assinatura digital para atestar a integridade do token.

 

Mas como validar este token JWT  no Magic xpi? 🤔

 

Existe uma especificação técnica para o JWT, mas nós não iremos implementá-la.

Pois existem diversos componentes prontos tanto em Java quanto em .NET FW que produzem estes tokens, então vamos usar a capacidade que o Magic xpi tem de integrar-se nativamente a estas tecnologias/plataformas e reaproveitar o que já foi feito antes, sem reinventar.

Neste exemplo, por preferência do autor, vamos integrar com o .NET FW (como demonstrado anteriormente aqui):

 

Uma vez que tenhamos clicado em “Generate” e depois em “Edit“, temos o esqueleto de uma classe .NET à nossa disposição (aqui está sendo usado o MS Visual Studio):

 

Primeiramente, precisamos alterar o target nas propriedades do projeto de “.NET 4” para “.NET 4.6.2(ou maior):

 

Em seguida, temos de acessar o NuGet Package Manager e instalar o pacote (gratuito) System.IdentityModel.Tokens.Jwt:

 

O componente será então atualizado com uma série de novas referências:

 

Por fim, basta adicionar a regra de negócio no método “Invoke” da classe, que vai pegar dados do fluxo de integração, validar o token, e devolver o resultado ao fluxo de integração:

Nota*: Ao invés de .NET, você poderia usar componentes Java através do Java Class Connector

 

E pronto! Se nenhuma destas etapas resultarem em erro, o fluxo pode seguir adiante e completar o trabalho definido na API.

 

Exemplos de validações com erro:

 

 

Exemplos de validações com sucesso:

 

Baixe deste endereço o projeto exemplo Magic xpi 4.13 que foi usado neste post, e veja como é fácil implantar a segurança do JWT  em suas APIs REST.

 

Fique ligado no Blog MagicBR, para mais dicas.

Manoel Frederico Silva – Gerente de Tecnologia e Evangelista MAGIC – Magic Brasil
Manoel Frederico Silva – Evangelista MAGIC – Magic Brasil

 

Para receber os artigos do Blog Magic Brasil em primeira mão no seu email, registre-se aqui

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *