asp.net - 我可以在 WebAPI2 REST API 中使用 ASP.NET Core 授权吗?
问题描述
我正在构建一个新的基于 Web API 2 的 RESTful API。(由于解决方案中的一些依赖关系,我必须针对完整的框架)。
我过去曾使用 System.Security.Claims.ClaimAuthorizationManager 来构建自定义用户安全检查。但是,此解决方案不是非常适合测试 (DI) 或启用异步。
我想使用 aspnet 核心 ( https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies ) 中可用的基于策略的授权,因为这似乎是一个适合我的好模型需要完美。
然而,我不知道这是否真的可行。看来真正的技术难点可能是策略需求通过在服务集合中注册处理程序来找到需求处理程序,例如:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthorization(options =>
{
options.AddPolicy("AtLeast21", policy =>
policy.Requirements.Add(new MinimumAgeRequirement(21)));
});
services.AddSingleton<IAuthorizationHandler, MinimumAgeHandler>();
}
有没有办法让 Web API 2 服务中的授权服务获取需求处理程序?
解决方案
我有与您类似的代码,并且授权策略按预期工作。在我的启动中,我调用一个类来加载所有策略:
services.AddAuthorization(options => {
foreach(var item in Policies.Build()) {
options.AddPolicy(item.Key, item.Value);
}
});
策略类只返回字符串/授权属性列表
var ret = new Dictionary<string, System.Action<AuthorizationPolicyBuilder>>();
ret.Add(PermissionNames.LocationsCreate, policy => policy.Requirements.Add(new PermissionRequirement(PermissionNames.LocationsCreate)));
然后在控制器上,我们只需使用 authorize 属性进行装饰:
[Authorize(Policy = PermissionNames.LocationsCreate)]
似乎适用于我们的 .net core 2.0 web api 项目。
推荐阅读
- wsl-2 - 有没有办法在 WSL2 上启用显示?
- vue.js - 如何使用vue Element-plus在不同的特定选项卡中修改相同的内容而不影响另一个选项卡
- assembly - MASM 在输入负小数时给出不正确的结果
- javascript - OpenCV JS 中的图像类型在哪里?
- python - 目录中的所有文件未在 python 中显示
- vb.net - VB.NET 如何结束所有 Subs
- python - 从第一个检测词的字符串中检测子字符串
- python-3.x - 如何将对象添加到列表并使用 Class 打印对象?
- rust - Rust:寻找 C memcpy 等价物
- mysql - mysql按最大值选择分组并获取唯一行