Estrutura REST do Django JWT

Resumo : neste tutorial, você aprenderá como usar a autenticação JSON Web Token (JWT) para API RESTful.

O que é JWT

Suponha que você tenha um código secreto que você e seu amigo usam para trocar mensagens. Este código permite que seu amigo confie que as mensagens são realmente suas. Isso ocorre porque apenas você e seu amigo conhecem o código. No mundo da API Web, o JWT (JSON Web Token) funciona de maneira semelhante.

JWT é como um “cartão de identificação” digital que cliente e servidor usam para verificar a identidade sem a necessidade de armazenar informações confidenciais, como nome de usuário/senha. JWT permite que cliente e servidor compartilhem informações com segurança entre cliente e servidor.

Imagine que você está fazendo login em um aplicativo móvel. Depois de inserir um nome de usuário e uma senha válidos, o servidor cria um JWT para você.

O JWT inclui seu ID de usuário e também pode conter outras informações. O servidor envia o JWT de volta ao seu aplicativo móvel.

Sempre que quiser acessar uma parte protegida do aplicativo, você apresenta este JWT. O servidor verifica a assinatura para verificar sua autenticidade e lê as informações para identificar quem você é e o que pode acessar

Estrutura do token JWT

O token JWT tem a seguinte estrutura:

  • Cabeçalho – o cabeçalho inclui o tipo de token, ou seja, JWT, e o algoritmo de assinatura que está sendo usado.
  • Carga útil – é aqui que o JWT armazena informações específicas, como ID do usuário, prazo de validade, etc. Pense nisso como os dados pessoais do seu cartão de identificação.
  • Assinatura – a assinatura é criada usando o cabeçalho, a carga útil e uma chave secreta que apenas o servidor conhece. Isso garante que as informações do token não sejam adulteradas.

Por exemplo, o seguinte mostra um token JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjkyNzc4MzQxLCJpYXQiOjE2OTI3NzgwNDEsImp0aSI6IjljODVmMTU4MzIzMzQwOTViYTkxZTNlM2Q2MDA0MWU3IiwidXNlcl9pZCI6MX0.Y1uOK_rxp6_kvDmuULxc82kXgKZPrWsTuLh0Wvg3_CsLinguagem de código:  CSS  ( css )

Se você copiar o token para a parte codificada do site jwt.io, verá três partes de sua estrutura:

Se você modificar o token JWT (adicionando ou removendo caracteres), o aplicativo validará a assinatura e mostrará o resultado:

Integrando JWT no aplicativo Django REST Framework

Primeiro, instale o pacote djangorestframework-simplejwtno ambiente virtual atual:

pip install djangorestframework-simplejwt

Segundo, adicione rest_framework_simplejwtao arquivo INSTALLED_APPSdo settings.pyprojeto:

INSTALLED_APPS = [
    ...,
    'rest_framework_simplejwt',
    ...
]Linguagem de código:  Python  ( python )

Terceiro, configure o projeto para usar a biblioteca adicionando rest_framework_simplejwt.authentication.JWTAuthentication à lista de classes de autenticação no settings.pyarquivo:

REST_FRAMEWORK = {
    ...
    'DEFAULT_AUTHENTICATION_CLASSES': (
        ...
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
    ...
}Linguagem de código:  Python  ( python )

Quarto, importe duas visualizações TokenObtainPairViewe TokenRefreshViewdo projeto e configure dois endpoints de API respectivamente rest_framework_simplejwt.views:urls.py

from django.contrib import admin
from django.urls import path, include

# jwt
from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/', include('api.urls')),
    path("auth/", include("rest_framework.urls")),

    # jwt
    path('api/v1/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/v1/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]Linguagem de código:  Python  ( python )

O endpoint api/v1/token/permite que você publique um nome de usuário e uma senha válidos para obter um par de tokens:

  • Token de acesso
  • Atualizar token

Depois de obter o token de acesso, você pode adicioná-lo ao cabeçalho de uma solicitação HTTP para chamar outras APIs. Quando o token de acesso expirar, você poderá chamar o api/v1/token/refresh/endpoint da API para obter o novo token de acesso.

Obtendo tokens

Para obter um par de tokens, você precisa fazer login usando um nome de usuário e senha válidos. Abra o api/v1/token/endpoint no navegador da web e você verá a seguinte página:

Depois de inserir um nome de usuário e senha válidos e clicar no botão POST:

você obterá a seguinte resposta:

HTTP 200 OK
Allow: POST, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY5Mjg2NDQ0MSwiaWF0IjoxNjkyNzc4MDQxLCJqdGkiOiJhM2E2MTcyYjZmYjY0YzFlOGJjZGUyMDQ0MjgyNDkwZCIsInVzZXJfaWQiOjF9.8WxI_HcKkm5z6Gx3kCPzpNIkx4nBP52tdiw7-GJv9tA",
    "access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjkyNzc4MzQxLCJpYXQiOjE2OTI3NzgwNDEsImp0aSI6IjljODVmMTU4MzIzMzQwOTViYTkxZTNlM2Q2MDA0MWU3IiwidXNlcl9pZCI6MX0.Q_-5AqFxbo1n2sQOOfcdd6ly8XFVT8wJNE-2TQph2ac"
}Linguagem de código:  texto simples  ( texto simples )

Agora, você pode usar o token de acesso para chamar outras APIs sem a necessidade de fornecer o nome de usuário/senha novamente.

Por exemplo, podemos usar o Postman para chamar a API com o endpoint api/v1/todos/para obter todos os todos da seguinte maneira:

Ele retorna todos os usuários cujo nome de usuário é John, que é aquele que usamos para fazer login e obter os tokens.

Quando o token de acesso expirar, você precisará chamar o endpoint da API /api/v1/token/refresh/com o token de atualização para obter o novo token de acesso.

Abra o endpoint /api/v1/token/refresh/no navegador da web e insira o token de atualização, clique no botão POST:

Vou lhe devolver um novo token de acesso:

HTTP 200 OK
Allow: POST, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjkyNzgzMDk0LCJpYXQiOjE2OTI3NzgwNDEsImp0aSI6IjFiNGRiYjgzZjRhMzRkYTlhMTgzNTY0MzY5M2MxNmQ0IiwidXNlcl9pZCI6MX0.lJeACjeegwoK_SE1NpmXBvKLNEvmahER8Eq-pZ71g7I"
}Linguagem de código:  JavaScript  ( javascript )

E você pode usar o novo token de acesso para acessar a parte protegida do aplicativo.

Baixe o código fonte do projeto

Clique no link a seguir para baixar o código-fonte do projeto:

Baixe o código-fonte do projeto.

Resumo

  • JWT significa token da web JSON.
  • JWT fornece uma maneira segura que permite que servidor e cliente troquem informações com segurança.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *