Skip to main content

ISP-split auth verifier seams for mgf-common consumers — a generic SessionVerifier + WebhookVerifier, a Clerk adapter (session-JWT + Svix-webhook), typed 401 errors, and mocks. Sibling of mgf-common under the mgf.* namespace.

Project description

mgf-auth

Two ISP-split auth verifier seams for mgf-common consumers — a generic SessionVerifier + WebhookVerifier, a Clerk adapter (session-JWT verification + Svix-webhook verification), typed 401 errors, and test mocks. A sibling of mgf-common under the mgf.* namespace.

Extracted from PlasmaMapper after its core re-design ISP-split the auth provider (ADR-016). A consumer keeps its own role-typed principal — SessionVerifier is generic over the principal type; identity resolution (Clerk ids → your principal) is your principal_resolver.

Install

pip install "mgf-auth[clerk]"   # [clerk] adds pyjwt for the session adapter

Use

from mgf.auth.clerk_session import ClerkSessionVerifier, ClerkClaims
from mgf.auth.clerk_webhook import ClerkWebhookVerifier

async def resolve(claims: ClerkClaims) -> MyPrincipal:
    return MyPrincipal(user_id=uuid5(NS, claims.sub), role=map_role(claims.org_role), ...)

session_verifier: ClerkSessionVerifier[MyPrincipal] = ClerkSessionVerifier(
    jwt_public_key=PEM, issuer="https://clerk.acme.example", principal_resolver=resolve,
)
principal = await session_verifier.verify_session(bearer_token)   # -> MyPrincipal

webhook_verifier = ClerkWebhookVerifier(webhook_secret=b"whsec_...")
event = await webhook_verifier.verify_webhook(headers, raw_body)   # -> WebhookEvent

Tests use MockSessionVerifier[MyPrincipal]() (add_session) and MockWebhookVerifier() (configure_webhook_secret + the sign() helper) — no Clerk, no network.

What's in it

Name What
SessionVerifier / WebhookVerifier the two @runtime_checkable seams (session is generic over P)
WebhookEvent the verified-webhook DTO (event_type, event_id, payload, received_at)
InvalidSessionError / InvalidWebhookSignatureError typed 401 errors (subclass mgf.common HttpUnauthorizedError)
mgf.auth.clerk_session.ClerkSessionVerifier / ClerkClaims PyJWT session verification ([clerk] extra)
mgf.auth.clerk_webhook.ClerkWebhookVerifier Svix-Signature HMAC webhook verification (stdlib)
MockSessionVerifier / MockWebhookVerifier in-process test doubles

Design

  • Generic over the principal (SessionVerifier[P]): the JWT mechanics live here; the consumer's principal_resolver produces its own principal shape — no imposed role/identity model.
  • Vendor SDK behind an extra: importing mgf.auth pulls no pyjwt (import-linter-enforced); the Clerk session adapter is the only place that needs it.
  • Webhook side is stdlib-only (HMAC-SHA256 over <id>.<ts>.<body>).
  • Session revocation (checking a revoked_sessions table) is a consumer concern — it's DB-coupled and app-specific, so it stays in the consumer, not here.

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

mgf_auth-0.1.0.tar.gz (102.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mgf_auth-0.1.0-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

Details for the file mgf_auth-0.1.0.tar.gz.

File metadata

  • Download URL: mgf_auth-0.1.0.tar.gz
  • Upload date:
  • Size: 102.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mgf_auth-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b0cfddda6247e922cd1249aafc84ee6a9386e49c6af527fddc886b3f68b0909c
MD5 7789787307db2ab383014c7aca94f046
BLAKE2b-256 6e83973321744063f786c5f0ed75164b521fec71d87befa8c68d025a62016de6

See more details on using hashes here.

File details

Details for the file mgf_auth-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mgf_auth-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mgf_auth-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c6790a19e287162863c6e43f0ffbd30f4c220760a49e1d6e824930c2acb99214
MD5 e8010277de3412fcf3f31a64702dd87e
BLAKE2b-256 efc4474a002ed9e22f2666e8e2e1c2cd5c25006b0248314a322a2db5c3a673b9

See more details on using hashes here.

Supported by

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