Skip to main content

py-xshl-session

Session in JWT

PyPI version Python Version License: GPL v3

Python library for managing JWT/JWE sessions with key management and XSHL Target integration.

  • 🇷🇺 Russian version: see README_RU.md
  • 📚 Full docs: docs/index.md → Quickstart, Guides, API, Security
  • 🌐 Localized docs (RU): docs/ru/index.md

Features

  • 🔐 JWT/JWE support for signing and encryption
  • 🎯 XSHL integration: Target-aware JWKS loading
  • ⚡ Background refresh of JWKS with TTL
  • 🛡️ Extended claims validation via custom SessionClaims
  • 📦 JWE serialization/deserialization helpers
  • 🔍 Built-in request tracing

Constants

  • DEFAULT_SESSION_VERSION = 1
  • DEFAULT_SESSION_EXPIRES = 120
  • DEFAULT_UID = "00000000-0000-0000-0000-000000000000"
  • DEFAULT_STR = "undef"

Quickstart

See docs/quickstart.md for a complete guide.

from xshl.session.keys import Keys
from xshl.session import Session, ConfigSession
import uuid

keys = Keys(name="session_name", url="https://example.org/jwks.json")
config = ConfigSession(
    keys=keys,
    app=uuid.uuid4(),
    audience=["service-api"],
    header={"alg": "RS256", "kid": "<kid>"},
    version=1,
    expires=3600,
    key=b"<private-key-pem>"
)
session = Session(config, "trace-1", "trace-2")

session.sub = "user-123"
session.aud = "service-api"
session.scope = ["read", "write"]

jwt_token = session.jwt

Note: Session.jwt uses a JsonDumps context internally to serialize claims because Authlib JWT encoding does not expose a default hook for JSON; see API docs. Merge note: all claims are copied on session + token, and claims in Session.merge_attributes are merged.

JWE helpers:

protected = {"alg": "RSA-OAEP-256", "enc": "A256GCM", "kid": "<kid>"}
serialized = session.serialize(b"payload", protected)
plaintext = session.deserialize(serialized)

Documentation

  • API details in docs/api.md
  • Configuration and operational tips in docs/guides.md
  • Security recommendations in docs/security.md

License

GPL v3 — see LICENSE and COPYRIGHT.

Contributing

  • Issues and feature requests: open on GitHub
  • Pull requests welcome. Please ensure:
    1. Tests pass
    2. Lint/style are respected
    3. Tests are added for new functionality
    4. You understand GPL v3 requirements for contributions

Metadata

Release files for xshl-session 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xshl-session 0.0.2
File Size Uploaded
xshl_session-0.0.2.tar.gz 37.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for xshl-session 0.0.2
File Interpreter ABI Platform
xshl_session-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 72.8 kB

Release files / xshl_session-0.0.2.tar.gz

Download URL xshl_session-0.0.2.tar.gz
Size 37.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b1ae28c3702a5236d878756b0c8c39a214aace9eb25d6804aa187a8546c35450
BLAKE2b-256 checksum
How to use checksums
d358598f919adc886b2973d4e003757925ed44b52fec57f0753c68cfc4c3730c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / xshl_session-0.0.2-py3-none-any.whl

Download URL xshl_session-0.0.2-py3-none-any.whl
Size 35.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c9233702238c4171c131646c2e93f7da3d4c1a43c00838128f1ca0eec0eec73d
BLAKE2b-256 checksum
How to use checksums
6223a6526aba9b6ac4850d78300df0dcb71c82602362328cf7816c39e6fdd78b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page