что делает тестирование невозможным - PullRequest
0 голосов
/ 28 апреля 2019

Мы только что получили поток кода, работающий с IdentityServer4 и angular-auth-oidc-client.

У нас есть следующие настройки для одного из наших API.

var guestPolicy = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .RequireClaim("scope", "gwcResourceApi")
    .Build();

services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
    .AddIdentityServerAuthentication(options =>
    {
        options.Authority = "https://our.live.server.com";
        options.ApiName = "ouResourceApi";
        options.RequireHttpsMetadata = false;
        options.ApiSecret = "ourresourceapi";
    });

services.AddAuthorization(options =>
{
    options.AddPolicy("admin", policy => { policy.RequireClaim("role", "Administrator"); });
});

services.AddMvc(options => { options.Filters.Add(new AuthorizeFilter(guestPolicy)); })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Тогда на нашем контроллере

[Authorize("admin")]
public class EazeeTrakFilesController : ControllerBase

А потом мы получаем такие заявления пользователей.

public async Task<IEnumerable<FileDTO>> GetFile(bool open)
{
    var userId = User.Claims.First(x => x.Type == "sub").Value;

Мы не можем тестировать наши тесты xuint. В нашем CustomWebApplicationFactory (созданном во время обучения Microsoft для тестирования контроллеров .Net Core MVC) мы добавили

services.AddAuthorization(options => { options.AddPolicy("Admin", authBuilder => { authBuilder.RequireRole("Administrators"); }); });

Это заставляет нас тестировать неохраняемые контроллеры. Думаю, я бы добавил это, чтобы вы немного узнали о нашей настройке xunit.

При тестировании охраняемого контроллера с [Authorize("admin")] мы получаем ошибки No authenticationScheme was specified, and there was no DefaultChallengeScheme found.

Мне приходит в голову, как нам получить поддельную личность, которую мы могли бы проверить. Нам нужно не только что-то притворяться администратором. Кроме того, как получить поддельного пользователя с претензиями?

...