fix(auth): address PR #758 auto-review (id-token verify, nonce, CI key)
Blocking: - AS proxy callback now calls verify_id_token before caching the proxy code so a tampered IdP response can't smuggle identity claims. Important: - Browser OAuth flow generates and verifies an OIDC nonce; new alembic migration 006 adds the nonce column to oauth_sessions. - _origin_matches_self logs a warning when CSRF check is bypassed. - oauth_tools.py uses get_shared_storage instead of fresh handles. Nits: - New token_utils.get_oidc_discovery shares the 5-minute cache with verify_id_token; oauth_login (integrated) and _revoke_refresh_token_at_idp now use it instead of issuing fresh discovery fetches. - Drop typing.Optional from oauth_tools.py in favour of X | None. CI: - test.yml generates an ephemeral Fernet TOKEN_ENCRYPTION_KEY per run with openssl, removing the dependency on a missing repo secret. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
2ef4bfc4af
commit
4c84d82984
+29
@@ -0,0 +1,29 @@
|
||||
"""Add nonce column to oauth_sessions for OIDC ID-token binding.
|
||||
|
||||
PR #758 finding 2: the browser OAuth flow generated PKCE + state but no
|
||||
``nonce``. Without a nonce, an attacker who obtains a valid ID token for
|
||||
another user (e.g. from a parallel auth request) could replay it inside
|
||||
this flow because the token isn't cryptographically tied to the
|
||||
authorization request. The nonce is generated in ``oauth_login``,
|
||||
forwarded to the IdP in the auth URL, and verified on the way back.
|
||||
|
||||
Revision ID: 006
|
||||
Revises: 005
|
||||
Create Date: 2026-05-02 16:00:00.000000
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
|
||||
revision = "006"
|
||||
down_revision = "005"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.execute("ALTER TABLE oauth_sessions ADD COLUMN nonce TEXT")
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# SQLite < 3.35 cannot DROP COLUMN; leave the column on downgrade.
|
||||
pass
|
||||
Reference in New Issue
Block a user