返回未授权状态时调用两次 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>
我实现了自己的 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>