【问题标题】:Resource based ASP.NET Authorization FormsAuthentication and WebApi基于资源的 ASP.NET 授权 FormsAuthentication 和 WebApi
【发布时间】:2014-09-12 15:28:36
【问题描述】:

将 webapi 与表单身份验证结合使用(我知道这可能听起来很奇怪,但这正是我所需要的)。

我有一条这样的路线:

[Route("{application}/orders}"]
public IHttpActionResult Get(string application) {
   var orders = OrderService.GetOrders(application); // return list of orders of applicaiton.
   return Ok(orders);
}

示例场景: 用户 John 有权查看应用程序“CoolApp”的订单 用户 Leia 有权查看应用程序“Robin”的订单 用户 Tristan 没有查看订单的权限。

在数据库上就像一个角色 - 资源关系。 用户角色:

User    -      Role     - Application
=====================================
John    - OrdersManager - CoolApp
Leia    - OrdersManager - Robin
Tristan - OtherRole     - Robin

我希望该路由检查用户是否有权获取该特定应用程序的订单。

我读到这个:Resource based authorization in .net,看起来很有希望。

首先,我不确定是否应该使用AuthorizeAttributeAuthorizationFilterAttributeIAuthorizationFilter 进行扩展,很遗憾,这里简要说明了http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api,信息不多。

第二,我读到绑定发生在授权之后,所以我不知道如何从 RouteData 获取值,因为我在路由数据上定义了 {application},我想我应该能够访问它。 MVC 的示例很少,但无法为 web api 获取一个示例,并且在 actionContext 对象中到处都是请求和上下文等对象,我不确定从哪里获取它以及如何以正确的方式获取它。

最后但并非最不重要的一点是,我应该覆盖所选扩展点的哪种方法。如果它同时具有异步和同步,我应该同时覆盖两者吗?

奖励:由于授权将依赖我的repository,如果可能的话,知道如何将其注入过滤器会很棒。 (我没有使用任何 IoC 容器)。

【问题讨论】:

    标签: c# asp.net asp.net-web-api


    【解决方案1】:

    覆盖 AuthorizationFilterAttribute 可能是更好的途径。你想要做的是传递你想要检查的属性:

     public class MyAuthorizeAttribute : AuthorizeAttribute
     {
         string role;
         string application
    
         public MyAuthorizeAttribute (string role, string application){ 
            this. role = roles;
            this.application = application;
         }
    
         protected override bool IsAuthorized(HttpActionContext actionContext)  {
               var routeData = actionContext.ControllerContext.RouteData;
               //do your checks
         }
     }
    

    您可以通过 IsAuthorized 方法中的 HttpActionContext 访问路由数据。现在您可以将属性附加到您的 ApiController 或 Action Method。

    如果您想使用 Web API ActionFilter 进行 DI,我建议您使用 IoC 容器

    【讨论】:

      猜你喜欢
      • 2012-10-02
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2013-09-22
      • 2021-08-31
      • 2021-08-24
      • 2019-07-18
      相关资源
      最近更新 更多