asp.net - [Authorize(Policy = "PolicyName")] 如何在 asp.net 核心中工作?
问题描述
有人可以告诉我 [Authorize(Policy = "PolicyName")] 是如何工作的,当用户未登录时,为什么要运行策略?例如,如果我从 .RequireAssertion 方法的委托返回“true”,即使用户是匿名用户,也可以访问操作或控制器?
[Authorize]
[Authorize(Policy = "TestAccess")]
public async Task<IActionResult> Test()
{
return Json("Test Actioned Reached");
}
为什么 [Authorize] 属性在这里是必需的?如果 [Authorize(Policy = "TestAccess")] 意味着 - 当用户不是匿名用户并且此策略通过时,将到达操作/控制器?
如果我写:
[Authorize(Policy = "TestAccess")]
public async Task<IActionResult> Test()
{
return Json("Test Actioned Reached");
}
政策看起来像这样:
services.AddAuthorization(options => {
options.AddPolicy("TestAccess", policy => policy.RequireAssertion(context =>
{
return true; // For Testing only
}));
});
即使用户是匿名用户,也会执行 Test() 操作。这是怎么回事?对不起,我的英语不好。谢谢你。
解决方案
试试下面的代码
services.AddAuthorization(options => {
options.AddPolicy("TestAccess", policy => policy.RequireAssertion(context => context.User.HasClaim("your claim type ","your claim value")));
});
您的代码只是在需求管道中添加了 true
services.AddAuthorization(options => {
options.AddPolicy("TestAccess", policy => policy.RequireAssertion(context =>
{
return true; // For Testing only
}));
});
上面的代码在处理程序的管道中添加了 true 并且 true 满足所有条件,包括匿名用户。
有关更多详细信息,请查看方法 src 代码
public AuthorizationPolicyBuilder RequireAssertion(Func<AuthorizationHandlerContext, bool> handler)
{
if (handler == null)
{
throw new ArgumentNullException(nameof(handler));
}
Requirements.Add(new AssertionRequirement(handler));
return this;
}
推荐阅读
- r - r:为什么在应用 as.Date() 和 origin 时字符串显示日期而不是日期?
- python - 使用 List 切片 Numpy 数组
- java - cmd中的“java -version”没有结果
- python - Python中的圆和弦图
- c# - 如何处理与 HttpClient 的并发冲突?
- macos - 无法在 MacOS 上使用 gfortran 在 makefile 中链接 BLAS 和 LAPACK
- scope - 在 Coq 中模拟全局和局部变量
- python - 从字典和字符串格式创建表 - Python
- powershell - Powershell - 删除过滤文件夹中的文件
- abp - abp 套件导航属性不起作用