首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在WebAPI2 REST API中使用ASP.NET核心授权吗?

我可以在WebAPI2 REST API中使用ASP.NET核心授权吗?
EN

Stack Overflow用户
提问于 2018-08-10 22:04:20
回答 1查看 229关注 0票数 0

我正在构建一个新的基于WebAPI2的RESTful应用程序接口。(由于解决方案中的一些依赖性,我必须以整个框架为目标)。

我过去曾使用System.Security.Claims.ClaimAuthorizationManager构建自定义用户安全检查。然而,此解决方案对测试友好(DI)或异步启用不是很好。

我想使用在aspnet核心(https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies)中可用的基于策略的授权,因为这似乎是一个非常好的模型,非常适合我的需求。

然而,我被卡住了,因为这是否真的可能。看起来真正的技术症结可能是策略需求通过在服务集合中注册处理程序来找到需求处理程序,例如:

代码语言:javascript
复制
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 API2服务中的授权服务获得需求处理程序?

EN

回答 1

Stack Overflow用户

发布于 2018-08-10 22:43:52

我有类似于您的代码,授权策略按预期工作。在我的启动过程中,我调用一个类来加载所有策略:

代码语言:javascript
复制
services.AddAuthorization(options => {
   foreach(var item in Policies.Build()) {
       options.AddPolicy(item.Key, item.Value);
   }
});

policies类只返回字符串/授权属性的列表

代码语言:javascript
复制
var ret = new Dictionary<string, System.Action<AuthorizationPolicyBuilder>>();

ret.Add(PermissionNames.LocationsCreate, policy => policy.Requirements.Add(new PermissionRequirement(PermissionNames.LocationsCreate)));

然后在控制器上,我们只需使用authorize属性进行修饰:

代码语言:javascript
复制
[Authorize(Policy = PermissionNames.LocationsCreate)]

似乎适用于我们的.net核心2.0webAPI项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51788269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档