Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3357908
А
Аноним
07 сентября 2025 11:15 · публичный вопрос
А
Аноним

Какой код для авторизации?

Ответ нейросети
07 сентября 2025 11:15

Задача понятна. Ниже приведу простой учебный пример “код для авторизации” на языке Python, который показывает базовый сценарий:

  • проверка логина и пароля (аутентификация),
  • выдача простого токена доступа после успешной аутентификации (авторизация),
  • базовая проверка валидности токена.

Важно: это учебный пример. В реальных приложениях используйте готовые библиотеки безопасности, хранение паролей в БД, HTTPS и т. д.

Что мы сделаем шаг за шагом

  • Шаг 1. Храним хеши паролей для пользователей (без хранения открытых паролей).
  • Шаг 2. Проверяем введённый логин и пароль — если совпало, считаем пользователя аутентифицированным.
  • Шаг 3. Генерируем одноразовый/временный токен доступа и сохраняем его вместе с временем истечения.
  • Шаг 4. Предоставляем функцию проверки валидности токена, чтобы защищённые участки можно было открыть только по действительному токену.

Пример кода (Python 3)

Пример простейшей аутентификации и авторизации (Python 3)

import hashlib import secrets import time

Хеширование паролей (для учебного примера)

def hash_password(pw: str) -> str: return hashlib.sha256(pw.encode()).hexdigest()

База пользователей (логин -> хеш пароля)

USERS = { "alice": hash_password("password123"), "bob": hash_password("qwerty"), }

Хранилище активных токенов: token -> (login, expiry_timestamp)

TOKENS = {}

TOKEN_LIFETIME = 300 # 5 минут

def verify_credentials(login: str, pw: str) -> bool: pw_h = hash_password(pw) return login in USERS and USERS[login] == pw_h

def generate_token(login: str) -> str: rnd = secrets.token_hex(16) ts = int(time.time()) raw = f"{login}:{ts}:{rnd}" token = hashlib.sha256(raw.encode()).hexdigest() TOKENS[token] = (login, ts + TOKEN_LIFETIME) return token

def is_token_valid(token: str) -> bool: data = TOKENS.get(token) if not data: return False login, expiry = data if time.time() > expiry: del TOKENS[token] return False return True

def main(): login = input("Логин: ").strip() pw = input("Пароль: ").strip() if verify_credentials(login, pw): token = generate_token(login) print("Успешный вход.") print("Ваш токен доступа:", token) print("Проверка токена:", "валиден" if is_token_valid(token) else "недействителен") else: print("Неверный логин или пароль.")

if name == "main": main()

Как это работает

  • Аутентификация: функция verify_credentials проверяет, совпадают ли введённый логин и пароль с сохранёнными хешами.
  • Авторизация: после успешной аутентификации выдается токен (token). Этот токен выступает своего рода «ключом» к доступу к защищённым ресурсам.
  • Валидация токена: функция is_token_valid проверяет, не истёк ли срок действия токена и существует ли он в хранилище TOKENS.

Некоторые замечания и варианты улучшений

  • В реальных проектах пароли не хранятся как простые хеши; применяют солёные хеши и bcrypt/scrypt/Argon2.
  • Вместо произвольного токена можно использовать JWT (JSON Web Token) или OAuth2-подход, но это требует дополнительных знаний и библиотек.
  • Не храните токены в памяти между запусками сервера; используйте базу данных или кэш сессий.
  • Всегда используйте HTTPS для передачи учётных данных.
  • Не выводите пароли пользователю и не храните их в логах.

Если хочешь, могу:

  • адаптировать пример под JavaScript (Node.js) или Java;
  • показать версию с JWT;
  • добавить пример проверки доступа к “защищённому” ресурсу по токену.