Мы только что получили поток кода, работающий с 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.
Мне приходит в голову, как нам получить поддельную личность, которую мы могли бы проверить. Нам нужно не только что-то притворяться администратором. Кроме того, как получить поддельного пользователя с претензиями?