Skip to main content

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

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

auth_lib_profcomff-2024.8.4.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

auth_lib_profcomff-2024.8.4-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

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

Hashes for auth_lib_profcomff-2024.8.4.tar.gz
Algorithm Hash digest
SHA256 0d49fafb2b88fbecab1aaa254780f924e0110fd2b2376b2c82f3ba3b5e708964
MD5 3ac2c0091ac2209092a40b52001445ee
BLAKE2b-256 04cc6e43f74bca477ebf0f8c821618e0bd9a047ced0a8133e20a784503c70db6

See more details on using hashes here.

File details

Details for the file auth_lib_profcomff-2024.8.4-py3-none-any.whl.

File metadata

File hashes

Hashes for auth_lib_profcomff-2024.8.4-py3-none-any.whl
Algorithm Hash digest
SHA256 fc6ba914713a12a51aa2cdd13130361808cf6f483b4d87697020a840f2805558
MD5 4f56326de8e591b49d21438f6d663ec5
BLAKE2b-256 e9aa5525b3751c5391e4690bd1fe02d37d5136e749be7e199019495f663d5ea0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page