/
sam_single_1
/
ServiceVkAuth
Обзор
Документация
Войти
/
sam_single_1
/
ServiceVkAuth
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main.py
77 строк
5 KB
sam_single_1
remove errors
23 окт 2024, 17:34
23 окт 2024, 17:34
5aebf78
Код
Авторство
О чём код?
from typing import Dict from fastapi import FastAPI from os import getenv from dotenv import load_dotenv from contextlib import asynccontextmanager from modules.endpoints.endpoints import auth_router, validate_router from modules.endpoints.error_shecmas import ErrorResponse400 description = """ ## Микросервис реализующий авторизацию через VK ID без SDK с обменом кода на бэкенде # Используемый сценарий 1. Пользователь инициирует процесс авторизации: нажимает кнопку Войти через VK ID. 2. Партнер запускает процесс авторизации. 3. Backend Партнера генерирует набор параметров PKCE, необходимых для защиты передаваемых данных, а также state и scopes: - code_verifier — случайно сгенерированная строка, новая на каждый запрос авторизации. Может состоять из следующих символов: a-z, A-Z, 0-9, _, -. Длина от 43 до 128 символов; - code_challenge — зашифрованный code_verifier; - code_challenge_method — метод шифрования code_verifier, константа. Всегда принимает значение s256; - state — произвольная строка состояния приложения. - scopes — список названий прав доступа, которые необходимы приложению в процессе получения токена. Если параметр не указан, то берется минимальное значение прав доступа по умолчанию — vkid.personal_info. 4. Backend Партнера передает code_challenge и state на свой Frontend. 5. Frontend Партнера открывает ссылку https://id.vk.com/authorize во вкладке браузера, используя несколько параметров. Основные из них: - client_id — ID приложения, полученный при создании приложения; - redirect_uri — адрес для возврата в приложение Партнера. 6. Также используются параметры code_challenge, code_challenge_method и state. 7. Пользователь проходит аутентификацию. 8. Пользователю отображается форма с разрешением на предоставление доступов приложению, и он разрешает доступ. апрос на предоставление доступов приложению Партнера передается в VK ID. 9. VK ID генерирует код авторизации. 10. VK ID выполняет редирект по указанному адресу с параметрами code, state и device_id. 11. Frontend Партнера проверяет полученный state. 12. Frontend Партнера передает code, state, device_id на свой Backend. 13. Чтобы обменять авторизационный код на токены, Backend Партнера использует метод API id.vk.com/oauth2/auth, где grant_type = authorization_code. В качестве аргументов использует code и device_id, которые получены после авторизации. В ответ на код авторизации VK ID возвращает набор токенов: Access token + Refresh token + ID token. Партнер получает Access token — авторизация успешно завершается. """ tags_metadata = [ { "name": "auth", "description": "Запросы, необходимые для авторизации", }, { "name": "validation", "description": "Запросы для проверки авторизованности пользоваетелй", }, ] @asynccontextmanager async def lifespan(app: FastAPI): # Before app start yield # After app finish load_dotenv() app_root = getenv("APP_ROOT_PATH") if app_root is None: raise Exception app = FastAPI( root_path=app_root, redoc_url=None, title="ServiceAuthVk", description=description, summary="Можно авторизовываться через ВК", version="0.2.0", contact={ "name": "Тюнин Семён", "email": "m2simont@gmail.com", }, ) app.include_router(router=auth_router) app.include_router(router=validate_router)