[英]Asp.net Core WebAPI Resource based authorization outside controller level
[英]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中基於資源的授權 ,看起來很有希望。
第一件事是我不確定是否應該使用AuthorizeAttribute
, AuthorizationFilterAttribute
或IAuthorizationFilter
擴展, 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.