Skip to main content

Decoupled authentication middleware, abstracting OIDC and OAuth2 protocols from the main application.

Project description

coreason-identity

Decoupled authentication middleware, abstracting OIDC and OAuth2 protocols from the main application.

Organization License Build Status Code Style: Ruff Documentation

Overview

coreason-identity ("The Bouncer") handles all Authentication (AuthN) and Role-Based Access Control (AuthZ) for the CoReason platform. It enforces a strict "Bouncer" philosophy: it checks IDs and checks lists but does not issue IDs.

The package standardizes:

  • Protocol: OIDC (OpenID Connect).
  • Identity Provider: Auth0 or Keycloak.
  • Library: Authlib.

Features

Based on the Product Requirements:

  • OIDCProvider: Fetches and caches JWKS from the OIDC Discovery URL (LRU Cache).
  • TokenValidator: Validates JWT signatures, standard claims (exp, iss, aud), and enforces strict audience checks to prevent "Confused Deputy" attacks.
  • IdentityMapper: Maps IdP claims to a standardized UserContext model, handling project context extraction and group-to-permission mapping.
  • DeviceFlowClient: Implements RFC 8628 OAuth 2.0 Device Authorization Grant for headless CLI authentication.
  • Observability: Emits OpenTelemetry spans and secure logs (PII hashed).
  • Security: DNS-based SSRF protection for OIDC discovery URLs (configurable bypass for development).

Installation

pip install coreason-identity

Usage

1. Token Verification (Server-Side)

Use CoreasonVerifierConfig for services that only need to validate tokens (no client credentials required).

from coreason_identity import IdentityManager, CoreasonVerifierConfig, InvalidTokenError
from pydantic import SecretStr

# Initialize (The Bouncer)
config = CoreasonVerifierConfig(
    domain="auth.coreason.com",
    audience="api://coreason",
    pii_salt=SecretStr("super-secret-salt-123"),  # Mandatory: for PII hashing
    http_timeout=5.0,  # Mandatory: fail fast if IdP is slow
    allowed_algorithms=["RS256"],  # Mandatory: algorithm allowlist
    clock_skew_leeway=0            # Optional: defaults to 0 (strict security)
)
identity = IdentityManager(config)

# Validate (The Check)
try:
    # Validate a raw Bearer token
    user_context = identity.validate_token(auth_header="Bearer eyJ...")

    # Access canonical Identity Passport fields
    print(f"User {user_context.user_id} ({user_context.email}) is active.")

    # Check groups for Row-Level Security
    if "admin" in user_context.groups:
        print("Admin access granted.")

except InvalidTokenError:
    # Handle invalid tokens (expired, bad signature, wrong audience, etc.)
    print("Access denied.")

2. Device Flow Login (CLI / Client-Side)

Use CoreasonClientConfig when the application acts as an OIDC Client (needs client_id).

from coreason_identity import IdentityManager, CoreasonClientConfig

# Initialize (The Borrower)
config = CoreasonClientConfig(
    domain="auth.coreason.com",
    audience="api://coreason",
    client_id="my-cli-client-id",  # Mandatory for client operations
    pii_salt=SecretStr("super-secret-salt-123"),
    http_timeout=10.0,
    allowed_algorithms=["RS256"]
)
identity = IdentityManager(config)

# CLI Login (The Device Flow)
# Initiate the flow
flow = identity.start_device_login(scope="openid profile email")
print(f"Go to {flow.verification_uri} and enter {flow.user_code}")

# Poll for tokens
try:
    tokens = identity.await_device_token(flow)
    print("Login successful!")
    print(f"Access Token: {tokens.access_token}")
except Exception as e:
    print(f"Login failed: {e}")

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

coreason_identity-0.8.0.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

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

coreason_identity-0.8.0-py3-none-any.whl (30.4 kB view details)

Uploaded Python 3

File details

Details for the file coreason_identity-0.8.0.tar.gz.

File metadata

  • Download URL: coreason_identity-0.8.0.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for coreason_identity-0.8.0.tar.gz
Algorithm Hash digest
SHA256 1866a7e63dda510003ab2721e171fd889b6d5ba3619d4d27fd19e5d9b7c5c117
MD5 aeb154c70b839742f7f2c959502fc436
BLAKE2b-256 4cf2b59a44d65fdc6e78000be9d9449159530ede3fe352c7398d7b75393890e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for coreason_identity-0.8.0.tar.gz:

Publisher: publish.yml on CoReason-AI/coreason-identity

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file coreason_identity-0.8.0-py3-none-any.whl.

File metadata

File hashes

Hashes for coreason_identity-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f2c65d8222986255144762989dcff5aab7ee3c5218df45e91f1915e8c9356325
MD5 a0f4fc0a131b2c4bcf012fa5eb1cb15f
BLAKE2b-256 6900f9d068284d594901a209deb2fd926319659dc7ae1cc22ca7d6be66078e72

See more details on using hashes here.

Provenance

The following attestation bundles were made for coreason_identity-0.8.0-py3-none-any.whl:

Publisher: publish.yml on CoReason-AI/coreason-identity

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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