fix(auth): схема bearerAuth в OpenAPI — кнопка Authorize в Swagger UI #30

Merged
aep merged 1 commits from fix/29-swagger-bearer-scheme into main 2026-10-06 14:44:53 +03:00
Owner

Bounded, Closes #29. Один файл кода + тесты.

Причина. Токен читался в verified_claims как authorization: Header(); для FastAPI это обычный параметр, не схема безопасности, поэтому в openapi.json не было components.securitySchemes, а Swagger UI не рисовал Authorize.

Что сделано. HTTPBearer(scheme_name="bearerAuth", bearerFormat="JWT", auto_error=False); значение заголовка собирается обратно в строку и идёт в прежний parse_bearer, так что 401 без заголовка, при чужой схеме и при «трёх частях» остались теми же; 403 не тронуты. Новые тесты в test_openapi_routes.py: схема bearerAuth объявлена, все маршруты кроме POST /dev/token и GET /healthcheck несут security.

Как проверить. make check (1126 passed), pytest -m "integration and not e2e" -k "auth or me_and_dev_token" (53 passed). Руками: /docs при DEBUG=true — замок Authorize справа вверху, вставить access_token из POST /dev/token без слова Bearer, выполнить GET /me.

Rulings I made. Имя схемы bearerAuth и bearerFormat: JWT — по соглашению OpenAPI; описание схемы содержит подсказку для Swagger. Публичные ручки: только dev-токен и healthcheck.

Находки. Нет. Парный PR docs: гайд фронта §8 и QA §4.5 (RSHB/arm-ka-docs#32).

🤖 Generated with Claude Code

Bounded, Closes #29. Один файл кода + тесты. **Причина.** Токен читался в `verified_claims` как `authorization: Header()`; для FastAPI это обычный параметр, не схема безопасности, поэтому в `openapi.json` не было `components.securitySchemes`, а Swagger UI не рисовал Authorize. **Что сделано.** `HTTPBearer(scheme_name="bearerAuth", bearerFormat="JWT", auto_error=False)`; значение заголовка собирается обратно в строку и идёт в прежний `parse_bearer`, так что 401 без заголовка, при чужой схеме и при «трёх частях» остались теми же; 403 не тронуты. Новые тесты в `test_openapi_routes.py`: схема `bearerAuth` объявлена, все маршруты кроме `POST /dev/token` и `GET /healthcheck` несут `security`. **Как проверить.** `make check` (1126 passed), `pytest -m "integration and not e2e" -k "auth or me_and_dev_token"` (53 passed). Руками: `/docs` при `DEBUG=true` — замок Authorize справа вверху, вставить `access_token` из `POST /dev/token` без слова Bearer, выполнить `GET /me`. **Rulings I made.** Имя схемы `bearerAuth` и `bearerFormat: JWT` — по соглашению OpenAPI; описание схемы содержит подсказку для Swagger. Публичные ручки: только dev-токен и healthcheck. **Находки.** Нет. Парный PR docs: гайд фронта §8 и QA §4.5 (RSHB/arm-ka-docs#32). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-06 14:43:38 +03:00
Токен читался зависимостью как Header(), поэтому в openapi.json не было securitySchemes и Swagger UI не показывал
Authorize (вопрос фронта 06.10.2026). Теперь HTTPBearer(auto_error=False) со scheme_name bearerAuth; значение
заголовка собирается обратно и идёт в parse_bearer — тексты 401/403 и правила («три части» → 401) не изменились.
Тесты: securitySchemes.bearerAuth есть, все маршруты кроме /dev/token и /healthcheck помечены security.
make check: 1126 passed; интеграция auth/me/dev-token: 53 passed.

Closes #29

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
aep merged commit 1d7f2c8176 into main 2026-10-06 14:44:53 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-core#30
No description provided.