Files
ipwhitelist-app/research/prompt-opus-auth.md
T

3.1 KiB
Raw Blame History

Промпт для Claude Opus 4 — архитектура OIDC/JWT для внешнего auth-api

Контекст (не анализируй)

Делаем микросервис на Node.js + Express. Он стоит ЗА общим auth-api платформы. Платформа сама не наша, мы не можем менять Keycloak.

Схема авторизации платформы:

  1. Браузер → lk-api-gateway → Keycloak (логин)
  2. После логина платформа обменивает code на токен через СВОЙ auth-api
  3. auth-api выпускает JWT с "iss": "auth-api" (не Keycloak!)
  4. Фронтенд платформы хранит access_token в localStorage и шлёт Authorization: Bearer <token> к своему бэкенду

Нам неизвестно:

  • JWKS URL auth-api (публичный ключ для проверки подписи)
  • Как именно фронтенд платформы будет вызывать НАШ сервис (прямой запрос браузера с токеном? Или через их API-гейтвей?)
  • Есть ли у нас доступ к этому auth-api или только к самому JWT

Реальный JWT (из HAR трафика):

{
  "iss": "auth-api",
  "sub": "0199e325-1cdf-7cda-9319-e5302a85e291",
  "ClientID": "WZ01325",
  "company_id": "3e64aac6-dcfc-4082-88dc-da19c86555a5",
  "company_name": "Тест",
  "email": "tazet@narod.ru",
  "token_type": "access",
  "realm_access": { "roles": null },
  "resource_access": { "account": { "roles": null } },
  "groups": null
}

Что нужно

Предложи стратегию проверки токенов в нашем сервисе. Мы не знаем JWKS URL auth-api и не имеем к нему доступа (пока). Нужно найти золотую середину между «вообще не проверяем подпись» и «требуем JWKS которого нет».

Конкретные вопросы:

  1. Если JWKS недоступен — что проверять ВМЕСТО подписи? (exp, iss, audience?)
  2. Может ли наш сервис валидировать iss='auth-api' без криптографии?
  3. Стоит ли делать промежуточный вариант: проверять exp+iss сейчас, а JWKS добавить когда дадут URL?
  4. Как защититься от подделки токена если подпись не проверяется?
  5. Нужен ли нам client_secret/shared secret с auth-api?

Ограничения:

  • Не предлагай «спросить у команды платформы» — мы и так спросим, но ответа пока нет
  • Не предлагай поднять свой Keycloak
  • Только практические варианты, которые можно закодить сейчас
  • ВЕСЬ ОТВЕТ ОДНИМ БЛОКОМ — без свёрток, без интерактивных элементов