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_Cs
Linguagem 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-simplejwt
no ambiente virtual atual:
pip install djangorestframework-simplejwt
Segundo, adicione rest_framework_simplejwt
ao arquivo INSTALLED_APPS
do settings.py
projeto:
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.py
arquivo:
REST_FRAMEWORK = {
...
'DEFAULT_AUTHENTICATION_CLASSES': (
...
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
...
}
Linguagem de código: Python ( python )
Quarto, importe duas visualizações TokenObtainPairView
e TokenRefreshView
do 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.