在Web Api中为自定义请求添加承载令牌

时间:2017-05-16 13:11:36

标签: asp.net-mvc asp.net-web-api asp.net-identity

我在我的项目中使用第三方库名称telogis map。对于其称为群集的功能之一,无法发送请求标头。只能传递查询字符串进行聚类,API调用的整个逻辑在JS库中完成。

我的项目使用基于承载令牌的身份验证并使用Web API 2构建。要解决此问题,我已在查询字符串中传递了访问令牌,并希望验证请求。我为此创建了以下CustomAuthorize属性:

public class ClusterRequestAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            base.OnAuthorization(actionContext);
        }

        public override Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
        {
            string accessToken = actionContext.Request.GetQueryNameValuePairs().Where(w => w.Key == "access_token").Select(w => w.Value).DefaultIfEmpty().FirstOrDefault();
            actionContext.Request.Headers.Remove("Authorization");
            actionContext.Request.Headers.Add("Authorization", accessToken);

            actionContext.ControllerContext.Request.Headers.Remove("Authorization");
            actionContext.ControllerContext.Request.Headers.Add("Authorization", accessToken);

            HttpContext.Current.Request.Headers.Remove("Authorization");
            HttpContext.Current.Request.Headers.Add("Authorization", accessToken);

            return base.OnAuthorizationAsync(actionContext, cancellationToken);
        }

        protected override bool IsAuthorized(HttpActionContext actionContext)
        {
            return base.IsAuthorized(actionContext);
        }
    }

但是IsAuthorized总是返回false。我使用Git Link

审核了Authorize API内部函数

根据它,我必须设置由于保护级别而无法访问的actionContext.ControllerContext.RequestContext.Header,因为它被标记为internal

是否还有其他解决此问题的方法,还是可以更好地完成?

0 个答案:

没有答案