Бета · редакция 2026.10-beta1 · MCP 2026-07-28

Issuer mix up и опасные URL

L28 · MCP 2026-07-28 · открытая бета · редакция 2026.10-beta1

Я не обмениваю code на токен, пока не уверен, к какой авторизации относится callback. При нескольких AS ошибка корреляции становится mix-up атакой. Проверка issuer и попытки должна происходить до отправки кода на token endpoint.

Предварительно: L25 · L26

Как я это использую

Сохраняйте выбранный AS и безопасный контекст авторизации. Сверяйте issuer по точным правилам, state и redirect URI. Отдельно защищайте discovery fetch от SSRF, DNS rebinding и неожиданных redirects. Разрешённый hostname нельзя проверять подстрокой: auth.example.attacker.test — другой origin.

Границы авторизации

Разбираем конкретный контракт

Это учебный fixture: поля с доменом .example и идентификаторы вымышлены. Если показан фрагмент, его нужно поместить в соответствующий envelope выбранного профиля.

{
  "expectedIssuer": "https://auth.example",
  "receivedIssuer": "https://auth.example.attacker.test",
  "decision": "reject before token exchange"
}

Лаборатория · L28

Измените условия, проверьте результат и разберите ошибку. Все адреса и данные учебные.

Что легко сломать

Учебный инжектор показывает подмену issuer и URL с похожим именем. Ваше решение должно отклонить их до обмена кода. Текст ошибки полезен пользователю, но code, token и verifier в лог попадать не должны.

Практика и самопроверка

Подменить issuer, redirect или metadata URL в сохранённой трассе. Успех: проверка останавливает поток до раскрытия кода.

Я советую сначала предсказать результат, затем изменить один параметр в лаборатории и объяснить разницу. Сохраните небольшой fixture с нормальным и ошибочным случаем для своего проекта. Тренажёр открыт без регистрации; для сохранения ответов на тесты и завершения урока войдите в аккаунт.

В конце страницы — три вопроса. После правильных ответов можно завершить урок; ошибка в следующей тренировке не стирает уже полученное подтверждение этой редакции теста.

На что я опирался

Профиль и ссылки проверены 15 октября 2026. Core, deprecated compatibility и extensions в этом курсе помечены отдельно. Примеры объясняют выбранные сценарии; для реализации сверяйте нормативные MUST/SHOULD и schema соответствующей версии.

Проверка знаний

Читайте свободно. Войдите, чтобы отвечать и сохранять прогресс.

Когда проверять issuer callback?

Равны ли auth.example и auth.example.attacker.test?

Что нельзя писать в access log?