Создание токенов JWT в Django

Чтобы создать JWT (веб-токен JSON) в Django, вы можете использовать несколько методов. Вот некоторые распространенные подходы:

Метод 1: использование библиотеки JWT

  1. Установите библиотеку JWT, например PyJWT, с помощью pip: pip install PyJWT.
  2. Импортируйте необходимые модули в представление или функцию Django.
  3. Создайте токен JWT, закодировав полезные данные секретным ключом.
  4. Верните токен в качестве ответа или используйте его для целей аутентификации.

Пример кода:

import jwt
def generate_jwt_token(request):
    # Define your payload
    payload = {'user_id': 123}

    # Define your secret key
    secret_key = 'your_secret_key'

    # Generate the JWT token
    token = jwt.encode(payload, secret_key, algorithm='HS256')

    # Return the token as a response
    return HttpResponse(token, content_type='text/plain')

Метод 2: создание JWT вручную

  1. Импортируйте необходимые модули в представление или функцию Django.
  2. Создайте словарь, содержащий заголовок и полезные данные для JWT.
  3. Сериализация словаря в строку JSON.
  4. Base64 кодирует строку JSON.
  5. Подпишите закодированную строку секретным ключом, используя криптографический алгоритм.
  6. Верните токен в качестве ответа или используйте его для целей аутентификации.

Пример кода:

import json
import base64
import hmac
import hashlib
def generate_jwt_token(request):
    # Define your payload
    payload = {'user_id': 123}

    # Define your secret key
    secret_key = 'your_secret_key'

    # Create the header and payload JSON string
    header = json.dumps({'alg': 'HS256', 'typ': 'JWT'})
    payload_str = json.dumps(payload)

    # Base64 encode the header and payload
    header_b64 = base64.urlsafe_b64encode(header.encode()).decode()
    payload_b64 = base64.urlsafe_b64encode(payload_str.encode()).decode()

    # Create the signature
    signature = hmac.new(secret_key.encode(), f'{header_b64}.{payload_b64}'.encode(), hashlib.sha256).digest()
    signature_b64 = base64.urlsafe_b64encode(signature).decode()

    # Generate the JWT token
    token = f'{header_b64}.{payload_b64}.{signature_b64}'

    # Return the token as a response
    return HttpResponse(token, content_type='text/plain')