返回未授权状态时调用两次 OnAuthorization

OnAuthorization Called Twice When Returning Unauthorized Status

我实现了自己的 AuthorizeAttribute,因为我通过 cookie 传递我的授权令牌。

public class ValidateToken : AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {

            var headers = actionContext.Request.Headers;
            CookieHeaderValue authToken = headers.GetCookies().FirstOrDefault();

            CookieState authCookie = authToken.Cookies.Where(p => p.Name == "AUTH-TOKEN").FirstOrDefault();

            actionContext.Request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authCookie.Value);

            bool isAuth = base.IsAuthorized(actionContext);

            if (!base.IsAuthorized(actionContext)){
                HandleUnauthorizedRequest(actionContext);
            }
        }

        protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
        {
            actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
        }
    }

我的问题是,在HandleUnauthorizedRequest内部,当我returnHttpStatusCode.Unauthorized再次调用函数OnAuthorization,然后调用HandleUnauthorizedRequest 认证检查失败后。在第二次使用 401 调用 Web API returns 时,我在前端看到了登录屏幕

我不想要一个。我只想像往常一样进行 401 returned。奇怪的是,如果我将 HttpStatusCode.Unauthorized 替换为 HttpStatusCode.Forbidden,则不会再次调用该函数,并且会立即调用 returns。

编辑 我发现 OnAuthorization 被调用了两次并且显示了登录表单,因为在 Angular 中我传递了 withCredentials: true为了我的饼干。所以我需要弄清楚为什么 withCredentials: true 会造成这种情况。

确保匿名身份验证启用并且Windows身份验证禁用.

<IISExpressAnonymousAuthentication>enabled</IISExpressAnonymousAuthentication>
<IISExpressWindowsAuthentication>disabled</IISExpressWindowsAuthentication>