Передать Basic credentials#

BasicScheme кодирует пару (login, password) и ставит результат в Authorization. Пароль остаётся данными Identity, поэтому вызывающий не повторяет его в каждом методе.

→ Запрос · GET /auth/basic

{"headers": {"Authorization": "Basic YWRhOmNvcnJlY3QtaG9yc2U="}}

← Ответ · 200 OK

{"credential": "ada"}
# examples/docs/auth_basic.py
BASIC = BasicScheme("mail-basic")


@dataclass(frozen=True, slots=True, kw_only=True)
class GetMailbox(HttpOperation[AuthResult]):
    __http__ = Http.get("/auth/basic", security=BASIC)


class MailboxApi(SyncApi):
    get_mailbox = op(GetMailbox)


def main() -> None:
    identity = Identity(auth=(BASIC.static(("ada", "correct-horse")),))
    with request_client() as client:
        result = MailboxApi(client, identity=identity).get_mailbox()
    print(f"user: {result.credential}")

Имя mail-basic нужно для диагностики. Само значение пары выбирает BasicScheme; вручную собирать или кодировать заголовок не требуется.

Предупреждение

Basic не шифрует пароль. Используйте его только через HTTPS и не выводите заголовок в журнал.

Файл целиком
"""Send HTTP Basic credentials through a declared scheme."""

from dataclasses import dataclass

from pydantic import BaseModel

from eazy_sdk import Http, HttpOperation, Identity, SyncApi, op
from eazy_sdk.auth import BasicScheme
from examples.docs.request_site import request_client


class AuthResult(BaseModel):
    credential: str


# region docs: auth-basic
# examples/docs/auth_basic.py
BASIC = BasicScheme("mail-basic")


@dataclass(frozen=True, slots=True, kw_only=True)
class GetMailbox(HttpOperation[AuthResult]):
    __http__ = Http.get("/auth/basic", security=BASIC)


class MailboxApi(SyncApi):
    get_mailbox = op(GetMailbox)


def main() -> None:
    identity = Identity(auth=(BASIC.static(("ada", "correct-horse")),))
    with request_client() as client:
        result = MailboxApi(client, identity=identity).get_mailbox()
    print(f"user: {result.credential}")
# endregion docs: auth-basic


if __name__ == "__main__":
    main()
user: ada

Дальше#