2016-08-27 7 views
15

Я изучаю новый проект, который мы планируем сделать сначала, чтобы мы могли затем реализовать приложения для веб-и родных приложений, а также разрешить третье партийной интеграции. До сих пор все стандартно.Автоматическое тестирование API защищенного API OAuth2/OpenID Connect

Мы также хотим иметь полный набор автоматических тестов для API, чтобы гарантировать, что он работает без регрессий, и обеспечить его соответствие требованиям. Опять же, довольно стандартный, но поскольку мы тестируем API, мы будем использовать HTTP-клиент в коде, а не веб-браузер.

Мы рассматривали oauth2/OpenID Connect для облегчения аутентификации и авторизации для API - в основном, клиенты могут аутентифицироваться, получать токен доступа, а затем использовать его для доступа ко всем ресурсам API.

То, что я пытаюсь выработать, - это хороший способ получить автоматические тесты для работы с частью oauth2, чтобы иметь возможность фактически вызвать API. Первая мысль заключалась в том, чтобы использовать типы «client_credentials» или «password», которые кажутся похожими на то, что они будут работать для того, что мы хотим, но они вообще не охватываются спецификацией OpenID Connect и, конечно, «пароль» «по крайней мере, это вообще не считается хорошей идеей.

Это лучший способ достичь этого или есть другие лучшие практики для такого рода ситуаций, которые могут использоваться с другими потоками, но без веб-браузера?

Редактировать: после (много) больше чтения, у меня есть новый план. Выполнение тестов полностью в автономном режиме, с помощью отдельного развертывания против отдельной базы данных и посев данных непосредственно в базу данных до того, как тесты запуск, а затем, используя стандарт OpenID Connect потоков, но с:

  • клиентом, который отмечен в базы данных для целей тестирования. Это важный бит, и это возможно только в том случае, если клиент может быть зарегистрирован непосредственно в базе данных без прохождения бизнес-логики.
  • подсказка = нет
  • login_hint = имя пользователя, чтобы получить маркер доступа для
  • сферы, содержащей «тестирование»

Система может затем обнаружить эту комбинацию фактов, и авторендеринг подлинность предоставленного имени пользователя без необходимости просмотра браузера.

Это кажется разумным? Или есть лучший способ?

+0

Вы пробовали инструмент OpenID Connect для сертификации (https://openid.net/certification/testing/), предоставленный OpenID Foundation? –

+0

Я понимаю, что это для тестирования самих служб OpenID Connect, в то время как меня больше интересует тестирование других сервисов API, которые должны быть созданы и защищены за токенами доступа OAuth2/OpenID Connect, что означает, что для вызова им нужен какой-то способ получения действительных токенов доступа программно. – Graham

+0

Я не понимаю, как безопасно создавать специальный пользователь тестирования? Что, если кто-то получит доступ к вашей тестовой среде или выяснит, как создать тестового пользователя на производстве? Это не похоже на правильное решение для меня. –

ответ

5

Поскольку вы хотите проверить API, не имеет значения, как вы получили access_token через браузер или каким-либо другим способом. Таким образом, есть (по крайней мере) два решения:

  1. Это другой путь мог бы стать client_credentials грантом. Вы должны сделать авторизацию сервера возвращать access_token что напоминает access_token, который будет возвращен для пользователя в OpenID Connect поток через браузер, но в зависимости от вашей AS реализации, которые должны быть выполнимыми.

  2. Bootstrap вашего клиента с помощью обычного браузера потока OpenID Connect для создания refresh_token наряду с access_token и хранить оба маркера с тестовым клиентом вместе с client_id и client_secret во время конфигурации.Ваш тестовый клиент может получить доступ к API до тех пор, пока не истечет access token, а затем получит новый access_token через грантовый тип refresh_token (используя client_id и client_secret).

сам OpenID Connect, аутентификация пользователя и id_token не имеют никакого отношения к вашим API, которые должны заботиться о только access_token.

+0

Чтобы разработать решение 1: создать тестовый клиент и добавить все требования, необходимые для прохождения требований авторизации для конечной точки. Если это проверяет претензию «под», добавьте требование к тестовому клиенту с именем «sub», что часто требуется, поскольку только аутентификация пользователя с использованием oidc будет генерировать суб. – Ian