【发布时间】:2016-02-05 07:55:48
【问题描述】:
我一直在研究这个问题。 我一直在尝试为 WebApi 实现自定义授权属性。我已经阅读了多篇关于如何执行此操作的文章,但由于某种原因,从未执行过授权。
public class ActivityAuthorizeWebApiAttribute : System.Web.Http.AuthorizeAttribute
{
private string[] Activities { get; set; }
public string Activity
{
set
{
this.Activities = value.Split(',').Select(x => x.Trim()).ToArray();
}
get { return string.Join(",", this.Activities); }
}
public ActivityAuthorizeWebApiAttribute()
{
}
protected override bool IsAuthorized(HttpActionContext actionContext)
{
var principalUser = HttpContext.Current.User;
if (principalUser == null || !principalUser.Identity.IsAuthenticated)
{
return false;
}
if (!principalUser.Activities().Any())
{
var activityProvider = (IActivityProvider)GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IActivityProvider));
var activities = activityProvider.GetActivitiesByRoleId(principalUser.Identity.GetUserId());
principalUser.SetActivities(activities);
}
return principalUser.HasAnyActivity(this.Activities.ToList());
//check your permissions
}
}
我可以看到我继承自正确的 AuthorizeAtribute,而不是 mvc。但是永远不会调用 IsAuthorized 方法。 控制器动作
[ActivityAuthorizeWebApi(Activity = "Home")]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
会不会是和bearer token Authentication结合的原因?
编辑: 我什至只尝试过这段代码:
public class CustomAuthorize : System.Web.Http.AuthorizeAttribute
{
}
作为自定义代码,而不是授权被执行。
【问题讨论】:
-
甚至在 IsAuthorized OnAutorization 方法将被调用之前.....我认为 OnAuthorizatoin 中可能存在一些可能导致跳过 ISAuthorized 方法调用的情况......做一件事覆盖 OnAuthorized方法,并且可能在该方法中调用 base.OnAuthorized....只需执行此测试以查看断点是否在此方法中命中
-
即使我覆盖 OnAuthorize,也不会执行 OnAuthorize。调试器永远不会在 OnAuthorize 和 IsAuthorized 中中断
标签: c# .net asp.net-web-api2