Спецификация: 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 для эндпоинта ресурса.