chr*_*389 5 c# authorization .net-core asp.net-core
我有一个策略想要在 C# 中测试
public class WorkflowCreatePolicy
{
public AuthorizationPolicy AuthorizationPolicy =>
new AuthorizationPolicyBuilder()
.RequireClaim("scope", "WorkflowAdmin")
.Build();
}
Run Code Online (Sandbox Code Playgroud)
有谁知道一种方法来测试 AuthorizationPolicy 来确认范围“WorkflowAdmin”成功而所有其他范围都失败?
这是我检查对象时看到的:
我设法找到这个网站:授权处理程序单元测试,但它谈论测试处理程序,并且具有将身份验证尝试标记为成功的代码。
我不确定这是否正在接近。目前还没有通过
[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));
}
Run Code Online (Sandbox Code Playgroud)
请参阅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);
}
Run Code Online (Sandbox Code Playgroud)
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>();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5283 次 |
| 最近记录: |