От потребителя (то есть приложение) стороны, процесс OAuth2 можно разделить на две части:
- редирект из приложения к «авторизовать» URL провайдера oauth2 в
- Биржу о «код», возвращенный поставщик oauth2 для маркеров доступа
для # 1 все, что вам нужно проверить, что при вызове маршрута, который начинается процессом аутентификации ответ возвращается перенаправление провайдера oauth2. Это легко осуществить с помощью Flask's test client. Ответ должен иметь код состояния 302 и заголовок «Местоположение», установленный на URL авторизации для вашего поставщика OAuth2. Обратите внимание, что вам не нужно, чтобы провайдер был включен, вы просто проверяете, что ответ является перенаправлением, но вам не нужно перенаправлять.
Тестирование на # 2 немного более активно. В вашем приложении Flask есть специальный URL-адрес, который обозначается как «URL-адрес перенаправления» для провайдера OAuth2, чтобы отправить вам код авторизации. Вы можете просто вызвать этот URL-адрес с помощью тестового клиента Flask, передающего макет кода, и у него нет проблем.
Проблема заключается в том, что в функции вида, которая обрабатывает ваш URL-адрес переадресации, вам необходимо вызвать провайдера OAuth2 для обмена аутентификационным кодом для токена доступа, и это выполняется синхронно. Чтобы предотвратить эту транзакцию, вы должны проверить app.config['TESTING']
и в этом случае пропустить фактический запрос и заменить его фальшивым ответом, который включает токены доступа.
С этого момента вам также необходимо подделать любые дополнительные вызовы поставщику OAuth2, которые отправляют токен доступа для запроса данных.
Если вы используете клиентскую библиотеку OAuth2 в своем приложении Flask, может быть проще создать поставщик макета, не создавая тестовые исключения в вашем приложении. В моем случае я использую rauth, и для этого я создал подкласс класса OAuth2Service
, который переопределяет правильные методы и отвечает макетными данными, которые я захватил с реального сеанса. Затем в моей тестовой настройке я просто создаю макет службы, и приложение обмануто, думая, что оно разговаривает с реальным сервером.
Надеюсь, это поможет.
обычно «внешний» Oauth (как для обслуживания Twitter, Evernote и т. Д.) Предоставляет sanbox для проведения наших тестов. Разве вы не нашли его для этой цели? –
Но они все равно потребуют от вас аутентификации против них? Просто чтобы они отправили вам фиктивные верительные грамоты для теста? –
да, конечно, они этого требуют.да, они вернули фиктивные учетные данные или эквивалент. Evernote, например, предоставляет специальные ключи только для целей тестирования. И это делает трюк, чтобы закончить наш разработчик API. После того, как вы будете скручивать своего разработчика, чтобы начать производство, вы получите новый ключ api для производства. –