RFC 9470 — Step-Up Authentication — Versola Docs
/docs
До 1.00.7.5versola.ioGitHub

RFC 9470 — Step-Up Authentication

OAuth 2.0 Step-Up Authentication Challenge Protocol — как edge отправляет challenge и как auth учитывает acr_values и max_age.

Спецификация: RFC 9470

Через Step-Up Authentication resource server требует более сильную или более свежую аутентификацию для чувствительной операции. В Versola роль resource server играет edge: он вычисляет правила step-up для каждого endpoint ресурса и отвечает challenge.

Статус

Реализован. Отмечено пунктов: 10 из 12.

Challenge WWW-Authenticate (от edge)

  • error="insufficient_user_authentication"
  • acr_values в challenge — ACR, которого требует endpoint, если acr токена его не удовлетворяет
  • max_age в challenge — если auth_time токена старше лимита endpoint
  • Условие step-up, которое нельзя вычислить, читается как «step-up нужен»; сломанное правило — это 500
  • Схема challenge следует за токеном — edge всегда отвечает Bearer, в том числе для токена с привязкой DPoP

Authorization request (на стороне auth)

  • acr_values — запрошенный контекст аутентификации; значение, которого не определяют ни тенант, ни Versola, отбрасывается, а то, которое нельзя обеспечить для пользователя, отклоняется
  • sensitive — класс, который Versola определяет сам: самый сильный фактор из имеющихся у пользователя (passkey, иначе пароль, иначе одноразовый код, в пределах того, что может запросить flow клиента); проверяется по тому, что сессия уже прошла
  • max_age — сессия старше лимита приводит к повторной аутентификации, а токены переносятся, только если входит тот же пользователь

Claims токена

  • acr — в ID token и в access token
  • auth_time — в ID token и в access token
  • amr — в ID token и в access token

Метаданные

  • acr_values_supported — нет в генерируемом документе discovery

Примечания

  • Правила step-up задаются для каждого endpoint в консоли администратора в разделе Resources: условие CEL, требуемый acr и максимальный возраст аутентификации. См. политики эндпоинтов.
  • sensitive не входит в словарь ACR тенанта: какой фактор он требует, зависит от пользователя, а запись словаря одинакова для всех. Одноразовый код никогда не заменяет passkey или пароль, которые пользователь уже завел; пользователь, фактор которого flow не может запросить, получает unmet_authentication_requirements. Тенант, определивший sensitive в собственном словаре, переопределяет его. Сам по себе класс не делает вход более свежим: сочетайте его с максимальным возрастом аутентификации на endpoint.

Куда смотреть

Политики эндпоинтов объясняют, как задать stepUpAcr, maxAge и stepUpCondition для эндпоинта ресурса.