Skip to content

fix(auth): require type=access in /me - #81

Merged
SlavaKuntsov merged 1 commit into
mainfrom
fix/issue-76-require-type-access-in-me
Sep 29, 2026
Merged

SlavaKuntsov merged 1 commit into
mainfrom
fix/issue-76-require-type-access-in-me

Conversation

@SlavaKuntsov

Copy link
Copy Markdown
Owner

Closes #76

Summary

GET /api/v1/auth/me принимал любой валидный по подписи и exp JWT как identity — в том числе 7-дневный refresh-токен. Теперь хендлер требует payload.get("type") == "access" сразу после decode_token, до извлечения sub и запроса в БД. Refresh-токен получает 401 без раскрытия личности и без обращения к БД.

Инвариант «refresh-токен — не identity» уже поддерживался Go-мидлварями гейтвея (#53) и зеркальной проверкой в POST /refresh (type == "refresh") — этот PR закрывает последнюю щель в Python-сервисе auth.

Acceptance criteria (issue #76)

  • /me с refresh-токеном → 401, identity не утекает, запрос к БД не выполняется
  • /me с access-токеном → 200 (существующий test_me_success)

Changes

  • services/auth/src/routers/auth.py — type-check в хендлере me (3 строки)
  • services/auth/tests/test_auth.py — регрессионный тест test_me_with_refresh_token_rejected (refresh → 401 + db.execute ни разу не вызван)

Verification

  • uv run pytest tests/test_auth.py -v — 19 passed
  • uv run flake8 src tests — clean
  • uv run mypy src — clean
  • black --check tests/test_auth.py — fail на пре-существующих длинных строках, уже присутствующих на origin/main (проверено git show origin/main:... | black --check -); данный PR их не добавляет

Review

Independent review (iteration 1): no findings — type-check стоит после проверки подписи/exp и до любых побочных эффектов; подделка type ломает подпись; токены без type fail closed (безопасный дефолт); других вызывающих decode_token без type-check нет.

Remaining risks

None. make e2e не гонялся — изменение покрыто юнит-тестами на границе парсинга токена, e2e-флоу auth не менялся.

@SlavaKuntsov SlavaKuntsov self-assigned this Sep 29, 2026
@SlavaKuntsov
SlavaKuntsov merged commit 681e418 into main Sep 29, 2026
4 checks passed
@SlavaKuntsov
SlavaKuntsov deleted the fix/issue-76-require-type-access-in-me branch September 29, 2026 18:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

P1 auth: require type=access in /me (refresh token must not be an identity)

1 participant