簡體   English   中英

基於資源的ASP.NET授權FormsAuthentication和WebApi

[英]Resource based ASP.NET Authorization FormsAuthentication and WebApi

使用帶有表單身份驗證的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無權查看命令。

在數據庫上就像角色-資源關系。 UserRole的:

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

我希望該路線檢查用戶是否有權獲取該特定應用程序的訂單。

我讀到以下內容: .net中基於資源的授權 ,看起來很有希望。

第一件事是我不確定是否應該使用AuthorizeAttributeAuthorizationFilterAttributeIAuthorizationFilter擴展, IAuthorizationFilter簡要說明的http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-不幸的是, web-api的信息並不多。

其次,我讀到綁定是在授權后發生的,所以我不知道如何從RouteData獲取值,因為我在路由數據上定義了{application},我想我應該可以訪問它。 MVC的例子很少,但是無法為Web api獲取一個例子,並且在整個actionContext對象上都沒有諸如請求和上下文之類的對象,我不確定從何處以及如何正確獲取它。

最后但並非最不重要的一點是,我應該覆蓋所選擴展點的哪種方法。 如果它既有異步又有同步,是否應該同時覆蓋這兩個?

獎勵:由於授權將依賴於我的repository ,因此,即使有可能,知道如何將其注入過濾器也將是一件很棒的事情。 (我沒有使用任何IoC容器)。

覆蓋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訪問routedata。 現在,您可以將屬性附加到ApiController或Action Method。

我建議使用IoC容器是否要使用Web API ActionFilter進行DI

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM