gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:30 31 4
gpt4 key购买 nike

我已经实现了自己的 AuthorizeAttribute,因为我通过 cookie 传递我的授权 token 。

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);
}
}

我的问题是,当我返回HttpStatusCode.Unauthorized 时,在HandleUnauthorizedRequest 中再次调用函数OnAuthorization然后在身份验证检查失败后调用 HandleUnauthorizedRequest。在第二次调用时,Web API 返回 401 但是我在前端看到了登录屏幕 enter image description here

我不想要一个。我只想像往常一样返回 401。奇怪的是,如果我将 HttpStatusCode.Unauthorized 替换为 HttpStatusCode.Forbidden,则该函数不会被第二次调用并立即返回。

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

最佳答案

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

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

关于c# - 返回未授权状态时调用两次 OnAuthorization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48756053/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com