Как аутентифицировать интеграционные тесты в Azure AD с включенным MFA?
В нашей Azure AD включена многофакторная проверка подлинности (MFA). Это прекрасно, когда пользователь получает доступ к защищенному ресурсу (веб-сайту). Однако это создает проблему при попытке реализовать конвейер CI, который включает в себя автоматические интеграционные / приемочные тесты. Чтобы обойти это, в настоящее время мы используем поток кода авторизации для аутентификации приложения с помощью ключа приложения.
Тем не менее, веб-приложение поддерживает безопасность на основе ролей с различными функциями, включенными / отключенными в зависимости от роли пользователя. Это легко проверить вручную, потому что мы можем войти в приложение, используя тестовые учетные записи, связанные с различными ролями. Поскольку мы должны использовать поток кода авторизации, чтобы обойти MFA в наших автоматизированных тестах, у нас нет способа проверить аспекты безопасности нашего приложения (кроме как требовать аутентифицированного пользователя).
Есть ли способ заставить это работать, чтобы мы получили токен доступа, который содержит утверждения, основанные на конкретной роли, которую мы тестируем, так же, как если бы мы вошли в систему как пользователь?
1 ответ
Вы можете использовать расширение авторизации Auth0 для хранения токенов на основе ролей и разрешений. https://medium.com/tojs/adding-groups-roles-and-permissions-to-a-jwt-access-token-in-auth0-827cc7df7662
Я бы предложил использовать один токен и отследить где-нибудь связь между USER и TOKEN_VALID_IF_ISSUED_AFTER.
В этот момент, когда пользователь выходит из системы, когда его разрешения меняются, когда они меняют пароль, вы можете вставить запись в эту таблицу с помощью $USER_ID и NOW().
В следующий раз, когда токен проходит через ваш API, вы проверяете, что он был выпущен после TOKEN_VALID_IF_ISSUED_AFTER через утверждение iat - если нет, пользователю придется получить совершенно новый токен.
См. Также этот поток, который предоставляет обходной путь: токены на основе ролей ASP.net Identity