gpt4 book ai didi

c# - 是否可以编写可以测试 AuthorizationPolicy 对象的测试?

转载 作者:行者123 更新时间:2023-11-30 23:08:17 27 4
gpt4 key购买 nike

我有一个要在 C# 中测试的策略

public class WorkflowCreatePolicy
{
public AuthorizationPolicy AuthorizationPolicy =>
new AuthorizationPolicyBuilder()
.RequireClaim("scope", "WorkflowAdmin")
.Build();
}

有谁知道测试 AuthorizationPolicy 以确认范围“WorkflowAdmin”成功而所有其他范围不成功的方法吗?

这是我检查对象时看到的:

enter image description here

我设法找到了这个网站:Authorization Handler Unit Tests但它谈论的是测试处理程序,并且具有将身份验证尝试标记为成功的代码。

我不确定这是否接近。目前没有通过

[Test]
public void GivenPolicyName_WhenICallPolicyChecks_ThenItPasses()
{
ClaimsPrincipal user = new ClaimsPrincipal(new ClaimsIdentity(new List<Claim> { new Claim(CustomClaims.Scope, "WorkflowAdmin") }));

WorkflowCreatePolicy workflowCreatePolicy = new WorkflowCreatePolicy();

AuthorizationHandlerContext authorizationHandlerContext = new AuthorizationHandlerContext(workflowCreatePolicy.AuthorizationPolicy.Requirements, user, null);

Assert.That(authorizationHandlerContext.HasSucceeded, Is.EqualTo(true));
}

最佳答案

参见 this test在 ASP.NET Core 安全单元测试中。我从中提取了模式并将其应用到您的政策中。

[Fact]
public async Task ShouldAllowIfScopeClaimWorkflowAdminIsPresent()
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
{
services.AddAuthorization(options =>
{
options.AddPolicy("SomePolicyName", new WorkflowCreatePolicy()
.AuthorizationPolicy);
});
});
var user = new ClaimsPrincipal(new ClaimsIdentity(
new Claim[] { new Claim("scope", "WorkflowAdmin") }));

// Act
var allowed = await authorizationService.AuthorizeAsync(user, "SomePolicyName");

// Assert
Assert.True(allowed.Succeeded);
}
private IAuthorizationService BuildAuthorizationService(
Action<IServiceCollection> setupServices = null)
{
var services = new ServiceCollection();
services.AddAuthorization();
services.AddLogging();
services.AddOptions();
setupServices?.Invoke(services);
return services.BuildServiceProvider().GetRequiredService<IAuthorizationService>();
}

关于c# - 是否可以编写可以测试 AuthorizationPolicy 对象的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46651152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com