Тестирование контроллера веб-API при использовании Identity Server - PullRequest
0 голосов
/ 05 октября 2018

Я заинтересован в тестировании конкретного вызова, который делается в веб-API, чтобы убедиться, что он делает то, что я ожидаю.В контроллере я ищу некоторую информацию на основе идентификатора пользователя, который в данный момент вошел в систему (авторизация обрабатывается Identity Server).Когда этот тест выполняется, я хочу, чтобы уже был пользователь, прошедший проверку подлинности и вошедший в систему. Как я могу смутить / обойти весь процесс авторизации, выполненный Identity?

1 Ответ

0 голосов
/ 05 октября 2018

Когда вы правильно настроили обработчик аутентификации в своем проекте веб-API, заявки из токена доступа заполняются в объекте пользователя HttpContext:

services.AddAuthentication(options =>
{
    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
    options.Authority = "https://<youridentityserver>";
    options.Audience = "yourapi";
    options.SaveToken = true;
});
public async Task<ActionResult> Get(string userName)
{
    //Does the subject claim match the user name?
    var subject = HttpContext.User.FindFirst(ClaimTypes.NameIdentifier);
    if ((subject == null) || (subject.Value != userName))
    return Unauthorized();

}

Путем насмешки над HttpContext вмодульный тест, вы можете проверить объект пользователя в вашем методе контроллера.Как макет HttpContext:

Макет HttpContext для модульного тестирования контроллера MVC ядра .NET?

...