Передать JWT#
HTTP-клиент передаёт JWT как строку с префиксом Bearer. Он не декодирует claims и не решает,
можно ли доверять подписи токена.
→ Запрос · GET /auth/jwt
{"headers": {"Authorization": "Bearer eyJhbGciOiJIUzI1NiJ9.demo.signature"}}
← Ответ · 200 OK
{"credential": "jwt"}
# examples/docs/auth_jwt.py
JWT = BearerScheme("mail-jwt")
@dataclass(frozen=True, slots=True, kw_only=True)
class GetProfile(HttpOperation[AuthResult]):
__http__ = Http.get("/auth/jwt", security=JWT)
class ProfileApi(SyncApi):
get_profile = op(GetProfile)
def main() -> None:
credential = "eyJhbGciOiJIUzI1NiJ9.demo.signature"
identity = Identity(auth=(JWT.static(credential),))
with request_client() as client:
result = ProfileApi(client, identity=identity).get_profile()
print(f"credential kind: {result.credential}")
BearerScheme("mail-jwt") отвечает только за размещение credential. Проверка issuer,
audience, срока действия и подписи принадлежит серверу или доверенному компоненту приложения.
Не передавайте JWT в параметре запроса и не выводите его в журнал. Если токен приходит после login и обновляется по refresh token, храните его в модели управляемой сессии.
Файл целиком
"""Transport a JWT as an opaque Bearer credential."""
from dataclasses import dataclass
from pydantic import BaseModel
from eazy_sdk import Http, HttpOperation, Identity, SyncApi, op
from eazy_sdk.auth import BearerScheme
from examples.docs.request_site import request_client
class AuthResult(BaseModel):
credential: str
# region docs: auth-jwt
# examples/docs/auth_jwt.py
JWT = BearerScheme("mail-jwt")
@dataclass(frozen=True, slots=True, kw_only=True)
class GetProfile(HttpOperation[AuthResult]):
__http__ = Http.get("/auth/jwt", security=JWT)
class ProfileApi(SyncApi):
get_profile = op(GetProfile)
def main() -> None:
credential = "eyJhbGciOiJIUzI1NiJ9.demo.signature"
identity = Identity(auth=(JWT.static(credential),))
with request_client() as client:
result = ProfileApi(client, identity=identity).get_profile()
print(f"credential kind: {result.credential}")
# endregion docs: auth-jwt
if __name__ == "__main__":
main()
credential kind: jwt