Кратко
- RFC 9470 позволяет ресурсу запрашивать более подходящую аутентификацию уже при обращении к конкретной операции. Вместе с этим возникает право прерывать чужую работу.
- Сообщение о недостаточной аутентификации передаёт не только требование клиенту, но и сведения о политике ресурса. Подробности отказа требуют отдельного решения о раскрытии.
- Работоспособность механизма зависит от того, можно ли выполнить требование и корректно закончить неудачную попытку. Совместимость интерфейсов и выдача нового токена этого не доказывают.
Что узнаёт тот, кому отказали
Сообщение о дополнительной проверке обычно рассматривают с точки зрения добросовестного пользователя. Ему объясняют, чего не хватает, чтобы продолжить работу. Однако у сообщения есть ещё один получатель: любой вызывающий компонент, которому ресурс решил показать своё требование. Прежде чем обсуждать удобство следующего входа, полезно спросить, что именно этот компонент теперь знает.
Допустим, разные операции вызывают разные требования к аутентификации. Это аналитический пример, а не обнаруженная уязвимость. Наблюдение за ответами потенциально позволяет судить о различиях в политике, даже если сами операции выполнить нельзя. Подробность, полезная законному клиенту, одновременно становится информацией о защищаемой системе.
RFC 9470 прямо обращает внимание на раскрытие требований через ответ ресурса. Документ допускает отправку такого ответа до проверки токена, но отмечает связанный риск: сведения могут получить стороны, ещё не доказавшие способность предъявить действительный токен для этого ресурса. Возможность определённого порядка действий не равна рекомендации применять его повсюду.
Это первый управленческий выбор в механизме дополнительной аутентификации. Нужно определить, кому сообщать условие, насколько подробно и после какой проверки. Нельзя решить вопрос одной универсальной фразой «чем понятнее ошибка, тем лучше». Слишком мало сведений мешает законной работе; слишком много расширяет знание о политике за пределами нужного круга.
Содержание ответа пользователю, сведения для клиента и ограниченная служебная диагностика могут различаться. Такое разделение — предлагаемый здесь подход к проектированию, а не готовая схема, которую предписывает RFC. Оно требует собственной проверки доступа и назначения данных. Перенос подробностей в журнал не делает их безопасными автоматически.
От сообщения к действию человека
У ответа ресурса есть и более непосредственное последствие. Приложение может начать новый процесс авторизации, вовлекая пользователя в дополнительное взаимодействие. Таким образом, API не просто объясняет отказ. Оно способно вызвать действия за пределами собственной системы.
В RFC 9470 для этого используется ошибка insufficient_user_authentication. Ресурс может сообщить приемлемые контексты через acr_values или ограничить давность аутентификации параметром max_age. Клиент передаёт соответствующее требование серверу авторизации. Ресурс затем должен оценить результат, а не считать сам факт обмена достаточным.
Такое позднее уточнение имеет разумное основание. Особенности конкретной операции могут быть неизвестны в момент первоначальной выдачи токена. Если запретить ресурсу учитывать их, решение о защите придётся принимать раньше и с меньшим объёмом информации. Проблема не в существовании этого права, а в том, что его применение требует участия других сторон.
Документ рассматривает возможность злоупотребления со стороны вредоносного ресурса, способного провоцировать взаимодействие с пользователем. Здесь не нужны утверждения о распространённости атак, которых источники не дают. Само наличие такого сценария означает, что клиенту нельзя воспринимать каждую новую просьбу как бесплатную и безусловно полезную.
В обычной организации похожая нагрузка может возникнуть без злого умысла. Владелец сервиса устанавливает условие, команда идентификации обеспечивает методы проверки, приложение управляет переходами, поддержка принимает обращения. Разделение ролей необходимо для распределённой системы, но оно не определяет, кто отвечает за совокупный результат.
Время пользователя легко выпадает из локальной отчётности. Ресурс фиксирует обоснованный отказ, сервер авторизации — обработанный запрос, приложение — выполненный переход. Ни один из этих показателей не говорит, была ли исходная задача завершена. Поэтому единицей эксплуатационной оценки должна оставаться разрешённая операция с понятным исходом, а не количество корректно отправленных сообщений.
Где требование расходится с доступной возможностью
На вопрос «поддерживается ли дополнительная аутентификация?» поставщик может ответить утвердительно, имея в виду протокол. Организация часто слышит другое обещание: нужные люди смогут выполнить нужные действия. Между этими утверждениями лежат устройства, регистрация, восстановление доступа и согласованное значение условий.
Термин step-up не задаёт универсальную шкалу, по которой любой метод можно расположить выше другого. Одной операции требуется определённый контекст, другой важна недавняя активная проверка. Название метода или количество факторов не подменяет договорённость о том, какое свойство необходимо подтвердить.
OpenID Connect Core различает добровольно запрошенные значения acr_values и существенную, то есть обязательную в соответствующем механизме, заявку на определённые значения acr. Если поддерживаемая заявка требует конкретного существенного контекста, подходящее значение должно быть обеспечено; иначе аутентификация считается неудачной. Обычное выражение предпочтения не следует молча приравнивать к такому условию.
Представим, что API ожидает конкретный контекст, а сервер авторизации возвращает иной допустимый для своей части процесса результат. Это не описание проверенного продукта. Пример показывает разницу между успешной обработкой запроса и выполнением условия доступа. Участники могут не спорить о синтаксисе и всё же расходиться в том, что считается успехом.
RFC 9470 рекомендует серверу авторизации трактовать запрошенный контекст в описанном процессе как необходимый для доступа и сообщать о невозможности его обеспечить. Сила этой формулировки — SHOULD; превращать её в безусловное MUST для всех обстоятельств было бы неточно.
Спецификация ошибки невыполненных требований аутентификации определяет unmet_authentication_requirements. Она требует использовать ошибку при невыполнении существенной заявки на контекст и допускает её применение в других подходящих случаях. Явное признание невозможности помогает не возвращать клиенту очередной результат, который заведомо не решает исходную задачу.
Однако сообщение об отсутствии возможности не создаёт саму возможность. Нельзя доставить отсутствующее устройство пользователю посредством ещё одного перенаправления. Нельзя завершить необходимую регистрацию, лишь повторив тот же запрос. Организация должна знать, какие предпосылки существуют у целевой группы, а не только какие методы перечислены в настройках.
Почему свежая выдача не обязательно помогает
Увидев отказ, команда может предложить получить новый токен. Иногда новый процесс действительно нужен. Но надо понимать, какое событие он способен изменить.
max_age задаёт допустимую давность активной аутентификации в секундах. Когда она превышена, правила OpenID Connect требуют попытки активной повторной аутентификации; соответствующий ID Token должен содержать auth_time. Это ограничение возраста события, а не возраста любого объекта, который появился после него.
Профиль JWT для токенов доступа в RFC 9068 связывает такие сведения, как auth_time, acr и amr, с исходной аутентификацией. В токенах, производных от одного ответа авторизации, соответствующие значения сохраняются, в том числе при обновлении и обмене. Новый момент выдачи не переписывает историю действия пользователя.
При этом клиент не должен разбирать содержимое токена доступа и строить на нём свою логику. Требование считать токен непрозрачным защищает контракт от случайной зависимости от видимого сегодня формата. Ресурс и издатель вправе использовать другой способ представления.
Уполномоченный ресурс может получать сведения через интроспекцию токена по RFC 7662. Но признак active сам по себе не удостоверяет, что выполнено конкретное требование к контексту или давности. RFC 9470 расширяет этот обмен соответствующими сведениями о контексте и времени. Нельзя приписывать все эти свойства одному ответу о действующем состоянии токена.
Для разбора неполадки нужен поэтому содержательный вопрос: что изменится в следующей попытке? Подходящее новое событие, завершённая регистрация или исправленное требование могут изменить исход. Просто иной токен при прежней аутентификации — не доказательство продвижения.
Неудачная попытка тоже нуждается в завершении
Остановить бесполезный цикл и разрешить запрещённую операцию — разные решения. Их смешение создаёт ложный выбор: либо бесконечно просить человека повторить действие, либо ослабить условие ради удобства.
Вместо этого процесс может закончиться ясным отказом, объяснением допустимого следующего шага и передачей вопроса компетентной стороне. Если предусмотрена альтернативная процедура, она должна иметь собственное основание и полномочия. Её нельзя создавать неявно из усталости поддержки или желания улучшить показатель завершённых задач.
RFC 9470 не устанавливает универсального числа повторов для каждого приложения. Предлагаемое ограничение попыток, основанное на изменении значимых обстоятельств, является эксплуатационным решением. Для разных услуг понадобятся разные условия остановки и возобновления.
Также не следует расширять действие специального режима без необходимости. Получение токена для отдельного чувствительного ресурса не обязательно требует заменить им все ранее используемые токены. У обычных операций могут быть другие требования. Один локальный запрос не должен незаметно перестраивать весь рабочий день пользователя.
Успешное внедрение поэтому включает отрицательный сценарий: система знает, что не может обеспечить доступ сейчас, и умеет закончить процесс без обмана, бессмысленного повторения и скрытого изменения политики. Это не поражение автоматизации. Это признание границы, за которой для нового результата требуется новое решение.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
