Skip to main content

auth-lib

Библиотека функций авторизации для микросервисов Твой ФФ!

pypi tg

Функционал

Хранение общих методов аутентификации и авторизации для бэкендов Твой ФФ

Примеры использования

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

Metadata

Release files for auth-lib-profcomff 2024.8.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for auth-lib-profcomff 2024.8.4
File Size Uploaded
auth_lib_profcomff-2024.8.4.tar.gz 15.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for auth-lib-profcomff 2024.8.4
File Interpreter ABI Platform
auth_lib_profcomff-2024.8.4-py3-none-any.whl Python 3 none any Details

Total release size: 27.8 kB

Release files / auth_lib_profcomff-2024.8.4.tar.gz

Download URL auth_lib_profcomff-2024.8.4.tar.gz
Size 15.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0d49fafb2b88fbecab1aaa254780f924e0110fd2b2376b2c82f3ba3b5e708964
BLAKE2b-256 checksum
How to use checksums
04cc6e43f74bca477ebf0f8c821618e0bd9a047ced0a8133e20a784503c70db6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.12.4

Release files / auth_lib_profcomff-2024.8.4-py3-none-any.whl

Download URL auth_lib_profcomff-2024.8.4-py3-none-any.whl
Size 12.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fc6ba914713a12a51aa2cdd13130361808cf6f483b4d87697020a840f2805558
BLAKE2b-256 checksum
How to use checksums
e9aa5525b3751c5391e4690bd1fe02d37d5136e749be7e199019495f663d5ea0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.12.4
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page