Python · API · Средний уровень
JWT-авторизация
Используйте JSON Web Tokens для авторизации, разберитесь с access/refresh токенами и обновлением токена.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Получение и обновление JWT токенов
#Справочник JWT
#Упражнения:
Получить пару JWT токенов
#Выполните POST к /api/auth/jwt/ с логином и паролем. Выведите первые 30 символов как access, так и refresh токенов.
import requests
BASE_URL = 'https://apilearn.tukas.dev'
credentials = {'username': 'ВАШ_ЛОГИН', 'password': 'ВАШ_ПАРОЛЬ'}
# Получите пару JWT и выведите первые 30 символов каждого токена
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
credentials = {'username': 'ВАШ_ЛОГИН', 'password': 'ВАШ_ПАРОЛЬ'}
response = requests.post(f'{BASE_URL}/api/auth/jwt/', json=credentials)
tokens = response.json()
print(tokens['access'][:30])
print(tokens['refresh'][:30])
Авторизация по схеме Bearer
#Получите JWT access token и используйте его со схемой Bearer для GET /api/users/profile/. Выведите логин и email из ответа.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Получите access token, затем GET профиля с Authorization: Bearer <token>
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
r = requests.post(f'{BASE_URL}/api/auth/jwt/', json={
'username': 'ВАШ_ЛОГИН', 'password': 'ВАШ_ПАРОЛЬ',
})
access = r.json()['access']
headers = {'Authorization': f'Bearer {access}'}
profile = requests.get(f'{BASE_URL}/api/users/profile/', headers=headers).json()
print(profile['username'])
print(profile['email'])
Обновить access token
#Получите пару JWT, затем сразу используйте refresh token для получения нового access token через POST /api/auth/jwt/refresh/. Выведите новый access token (первые 30 символов).
import requests BASE_URL = 'https://apilearn.tukas.dev' # 1. Получите начальную пару токенов # 2. Используйте refresh token для получения нового access token # 3. Выведите первые 30 символов нового access token
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
r = requests.post(f'{BASE_URL}/api/auth/jwt/', json={
'username': 'ВАШ_ЛОГИН', 'password': 'ВАШ_ПАРОЛЬ',
})
refresh = r.json()['refresh']
r2 = requests.post(f'{BASE_URL}/api/auth/jwt/refresh/', json={'refresh': refresh})
new_access = r2.json()['access']
print(new_access[:30])
Написать get_access_token()
#Напишите функцию get_access_token(username, password), которая возвращает свежий JWT access token. Вызовите её и выведите результат.
import requests
BASE_URL = 'https://apilearn.tukas.dev'
def get_access_token(username, password):
# POST к /api/auth/jwt/ и возврат access token
pass
token = get_access_token('ВАШ_ЛОГИН', 'ВАШ_ПАРОЛЬ')
print(token[:30])
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
def get_access_token(username, password):
response = requests.post(
f'{BASE_URL}/api/auth/jwt/',
json={'username': username, 'password': password},
)
return response.json()['access']
token = get_access_token('ВАШ_ЛОГИН', 'ВАШ_ПАРОЛЬ')
print(token[:30])
Написать refresh_access()
#Напишите функцию refresh_access(refresh_token), которая возвращает новый access token через эндпоинт обновления. Затем напишите небольшой скрипт, который получает начальную пару и сразу обновляет access token, выводя оба (первые 20 символов каждого).
import requests
BASE_URL = 'https://apilearn.tukas.dev'
def refresh_access(refresh_token):
# POST к /api/auth/jwt/refresh/ и возврат нового access token
pass
# Получите начальную пару, затем обновите
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
def refresh_access(refresh_token):
response = requests.post(
f'{BASE_URL}/api/auth/jwt/refresh/',
json={'refresh': refresh_token},
)
return response.json()['access']
r = requests.post(f'{BASE_URL}/api/auth/jwt/', json={
'username': 'ВАШ_ЛОГИН', 'password': 'ВАШ_ПАРОЛЬ',
})
original_access = r.json()['access']
refresh_token = r.json()['refresh']
new_access = refresh_access(refresh_token)
print('оригинальный:', original_access[:20])
print('обновлённый:', new_access[:20])