Библиотека функций авторизации для микросервисов Твой ФФ!
Project description
auth-lib
Библиотека функций авторизации для микросервисов Твой ФФ!
Функционал
Хранение общих методов аутентификации и авторизации для бэкендов Твой ФФ
Примеры использования
FastAPI
from auth_lib.fastapi import UnionAuth
from fastapi import APIRouter, Depends
router = APIRouter(prefix="/...")
## Чтобы дернуть ручку нужен один скоуп, авторизация обязательна
## Юзкейс https://github.com/profcomff/timetable-api/blob/a374c74cd960941100f6c923ff9c3ff706a1ed09/calendar_backend/routes/room/room.py#L45
@router.smth("/")
async def foo(_=Depends(UnionAuth(scopes=["service.resource.method"], allow_none=False, auto_error=True))):
pass
## Чтобы дернуть ручку нужно два скоупа, авторизация обязательна
## Юзкейс https://github.com/profcomff/print-api/blob/775f36fdd185eec8d9096d3472b7730cf5ac9798/print_service/routes/user.py#L78
@router.smth("/")
async def bar(_=Depends(UnionAuth(scopes=["scope1", "scope2"], allow_none=False, auto_error=True))):
pass
## Чтобы дернуть ручку не нужны скоупы, авторизация необязательна, но если передана недействительная сессия, то кинет ошибку
@router.smth("/")
async def baz(_=Depends(UnionAuth(scopes=[], allow_none=True, auto_error=True))):
pass
## Чтобы дернуть ручку не нужны скоупы, авторизация обязательна
@router.smth("/")
async def foo(_=Depends(UnionAuth(scopes=[], allow_none=False, auto_error=True))):
pass
Depends вызывает инстанс класса с нужными параметрами и возвращает словарь со всеми полями отсюда https://api.test.profcomff.com/#/Logout/me_me_get
Параметры конструктора UnionAuth
scopes: list[str]
- список имен скоупов, которые нужны в данной ручке. Например["printer.user.create", "printer.user.delete"]
allow_none: bool
- Если true, то при отсутствии нужного заголовка в запросе ручка будет доступна юзеру, если заголовк передан, то обработка идет в зависимости от следующего параметраauto_error: bool
- еслиTrue
, то при несовпадении скоупов/завершенной сессии и т.д. (на запросGET /me
не 200) - кинет 401, еслиFalse
, то не будет кидать ошибки, но будет возвращатьNone
Чтобы задать хост авторизации надо в переменные окружения или в .env файл прописать AUTH_URL="..."
Настройки
auth_url="https://api.test.profcomff.com/auth/"
AUTH_AUTO_ERROR: bool = True
AUTH_ALLOW_NONE: bool = False
Тестирование сервисов
Установите нужные завивсимости
pip install 'auth-lib-profcomff[testing]'
Используйте маркировку для тестирования
import pytest
from fastapi.testclient import TestClient
from fastapi import FastAPI
@pytest.fixture
def client(auth_mock):
yield TestClient(FastAPI())
@pytest.mark.authenticated("scope1", "scope2", ..., user_id=5)
def test1(client):
"""
В этом тесте будут выданы скоупы scope1, scope2, user_id в ответе будет равен 5
библиотека не будет проверять токен через АПИ, будет просто возвращать
нужный словарь, как будто пользователь авторизован с нужными скоупами
"""
assert 2*2 == 4
@pytest.mark.authenticated()
def test2(client):
"""
В этом тесте скоупов выдано не будет, user_id будет равен 0
но библиотека не будет проверять токен через АПИ, будет просто возвращать
нужный словарь, как будто пользователь авторизован с нужными скоупами
"""
assert 2*2 == 4
def test3(client):
"""
В этом тесте скоупов выдано не будет, библиотека будет проверять
токен через АПИ
"""
assert 2*2 == 4
Contributing
-
Основная информация по разработке наших приложений
-
Ссылка на страницу с информацией по разработке auth-lib
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file auth_lib_profcomff-2024.8.4.tar.gz
.
File metadata
- Download URL: auth_lib_profcomff-2024.8.4.tar.gz
- Upload date:
- Size: 15.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0d49fafb2b88fbecab1aaa254780f924e0110fd2b2376b2c82f3ba3b5e708964 |
|
MD5 | 3ac2c0091ac2209092a40b52001445ee |
|
BLAKE2b-256 | 04cc6e43f74bca477ebf0f8c821618e0bd9a047ced0a8133e20a784503c70db6 |
File details
Details for the file auth_lib_profcomff-2024.8.4-py3-none-any.whl
.
File metadata
- Download URL: auth_lib_profcomff-2024.8.4-py3-none-any.whl
- Upload date:
- Size: 12.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fc6ba914713a12a51aa2cdd13130361808cf6f483b4d87697020a840f2805558 |
|
MD5 | 4f56326de8e591b49d21438f6d663ec5 |
|
BLAKE2b-256 | e9aa5525b3751c5391e4690bd1fe02d37d5136e749be7e199019495f663d5ea0 |