Зависимости под контур: PyJWT[crypto] 2.8.0, cryptography 43.0.3 (и правка JwksVerifier) #43
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Откуда
Запрос разработчика, который переносит сервисы в контур РАИСА: в arm-core должны стоять
pyjwt[crypto]==2.8.0иcryptography==43.0.3. Сейчасapi/requirements.txt:PyJWT[crypto]==2.15.1,cryptography==50.0.2;api/requirements-dev.txt:PyJWT[crypto]≥ 2.9.Что проверено (07.10.2026, отдельный venv)
requirements.txtс этими версиями разрешается без конфликтов (uv pip compile, кромеraisa_*).DevHs256Verifier,POST /api/v1/dev/token) на 2.8.0 работает: encode/decode HS256,require: [exp, sub], чужая подпись →InvalidSignatureError.PyJWKClient(cache_keys, cache_jwk_set, lifespan, timeout)на 2.8.0 принимаются.JwksVerifier:src/core/auth.py,_signing_keyотдаёт вjwt.decodeсам объектPyJWK— это поддерживается только с PyJWT 2.10. На 2.8.0TypeError: Expecting a PEM-formatted key→ перехватывается → 401 «недействительный токен» на любой токен из JWKS. СтатическийAUTH_PUBLIC_KEYработает.Что сделать
api/requirements.txt:PyJWT[crypto]==2.8.0,cryptography==43.0.3;api/requirements-dev.txt: убрать нижнюю границу 2.9 (согласовать с 2.8.0).JwksVerifier._signing_key: вjwt.decodeпередаватьsigning_key.key, а допустимый алгоритм выводить из типа ключа самим (RSA → RS256, EC P-256 → ES256 — как уже сделано дляAUTH_PUBLIC_KEYв_load_static_key), чтобы сохранить поведение «ключ одного типа не принимает токен другого алгоритма» (Срез 0, решение #72).api/tests/test_auth_core.py(блок JwksVerifier,_FakeJwkClient) — зелёные на 2.8.0; добавить случай RSA-ключ + ES256-токен → 401 (а не 500). Проверить, чтоPyJWKClientConnectionErrorесть в 2.8.0 (импортируется в тестах).make check-fullзелёный на новых версиях.Контекст
В контуре пока разворачиваем без платформенной аутентификации, только dev-заглушка (
DEBUG=true,AUTH_DEV_ISSUER=true,AUTH_DEV_SECRET) — она с 2.8.0 работает и без этой задачи. JWKS-путь понадобится, когда подключим SSO РАИСА (OQ-54: параметры Keycloak,iss/aud, claim с email; не выяснено, используется ли на платформеraisa_fastapi_protected_api— в коде он импортируется, но не подключён). Возможно, версии 2.8.0 / 43.0.3 — требование самогоraisa_fastapi_protected_api; уточнить у разработчика.Bounded-задача. Если
requirements.txtтрогает Срез 3b (#36) — начинать после его слияния.