Использование IdentityServer4 с тестами интеграции WebApplicationFactory - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь заставить мои интеграционные тесты работать с защищенной конечной точкой API. Мой тестовый вызов соединяет конечную точку соединения / токена IDS и получает действительный токен Когда я использую это для вызова защищенного API, я всегда получаю ошибку с invalid_token. (API также является локальным для IDS)

Если я вручную отлаживаю IDS и использую почтальон для получения токена, а затем вручную устанавливаю его и вызываю защищенный API с почтальоном, он работает нормально.

Я подозреваю, что внутренняя часть кода проверки IDS не может попасть в конечную точку обнаружения, поскольку она раскручивает свой собственный HttpClient. Я знаю, что клиент WebApplicationFactory является специальной реализацией HttpClient.

Есть ли способ, которым я могу внедрить клиент WebApplicationFactory в IDS во время настройки / запуска, чтобы он работал?

Или Есть ли способ, которым я могу создать поддельную конечную точку авторизации, которая просто проверяет любой токен, отправленный в заголовке Auth?

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

Спасибо.

1 Ответ

0 голосов
/ 09 марта 2020

Как обычно, сразу после того, как я спрашиваю о чём-то, на чем меня часами балуют, я это выясняю. Вот простое решение, основанное на этом другом вопросе, который имеет несколько более запутанный ответ ( Как я могу установить свой IdentityServer4 BackChannelHandler из теста интеграции xUnit с помощью WebApplicationFactory? ).

В вашем Startup.cs добавляет свойство stati c:

/// <summary>
/// For integrationtesting set this to Factory.Server.CreateHandler()
/// </summary>
public static HttpMessageHandler JwtBackChannelHandler { get; set; }

Затем добавьте это к вашим .AddIdentityServerAuthentication() параметрам:

if (JwtBackChannelHandler != null)
{
    options.JwtBackChannelHandler = JwtBackChannelHandler;
}

В вашем конструкторе для вашего тестового класса, который реализует IClassFixture<WebApplicationFactory<Startup>> добавьте это:

Startup.JwtBackChannelHandler = Factory.Server.CreateHandler();

Это позволит вам вызвать конечную точку токена и получить реальный токен и использовать его в качестве заголовка аутентификации в ваших интеграционных тестах. Горячая Diggity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...