【问题标题】:Can I use ASP.NET Core authorization in a WebAPI2 REST API?我可以在 WebAPI2 REST API 中使用 ASP.NET Core 授权吗?
【发布时间】:2018-08-10 14:04:19
【问题描述】:

我正在构建一个新的基于 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 服务中获取需求处理程序?

【问题讨论】:

  • 两者都使用 ASP.NET 标识。你为什么不使用 ASP.NET Core 呢?您可以使用 ASP.NET Core 定位完整框架,它不依赖于 .NET Core 运行时
  • 我想我只是对如何(或应该)混合和匹配 asp.net core 和 web api 2 (System.Web.Http) 感到有点困惑。您是否建议用 asp.net 核心替换 web api 2,但目标是完整的框架?
  • 是的,ASP.NET Core 是 ASP.NET MVC 6 的新名称。它绑定到 .NET Core 运行时。在项目创建对话框中,从运行时列表中选择完整的运行时
  • 好的,谢谢@PanagiotisKanavos,我会试一试的。

标签: asp.net asp.net-core asp.net-web-api2


【解决方案1】:

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

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 项目。

【讨论】:

  • ASP.NET Core 中没有单独的 Web API 项目。这是一个关于 ASP.NET Web API 2 的问题
猜你喜欢
  • 2020-09-25
  • 2023-03-12
  • 2019-04-21
  • 2018-09-29
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2017-06-08
  • 2020-05-18
相关资源
最近更新 更多