我们刚刚获得了与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.
在我看来,我们如何获得可以测试的伪造身份。我们不仅需要装扮成管理员的东西。另外,我们如何获得假冒索赔用户?