我正在尝试创建自己的IAuthorizationFilter
属性类。基本上,每个api调用都有一个名为'key'的查询字符串参数。然后,我将使用简单的授权属性来装饰任何需要此操作的操作。
我希望我的OnAuthorization(..)
方法只提取查询参数的值(如果已提供)。如果是,并且它是合法的,则用户被授权。否则,他们不是。
我不确定如何在OnAuthorization(..)
方法中执行此操作。
或者我应该使用IActionFilter
代替吗?
public void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
ApiKey apiKey = null;
string queryStringKey = filterContext.HttpContext.Request.QueryString["key"];
if (!string.IsNullOrEmpty(queryStringKey))
{
apiKey = GetApiKey(queryStringKey); // Custom code that checks a dictionary.
}
// Do we have a key?
if (apiKey == null)
{
filterContext.Result = new HttpUnauthorizedResult();
}
// TODO: Is this key allowed for this domain?
// All is good, so don't do anything else.
}
答案 0 :(得分:2)
您应该能够检查传递给OnAuthorization方法的AuthorizationContext参数的HttpContext.Request.QueryString属性。
要根据Key querstring值的值拒绝访问,可以将AuthorizationContext参数的Result属性设置为非null值。如果需要,可以将其设置为HttpUnauthorizedResult类的实例。