Передать 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