【问题标题】:Return 401 for invalid token even if method is marked AllowAnonymous即使方法标记为 AllowAnonymous,也为无效令牌返回 401
【发布时间】:2023-03-10 04:17:02
【问题描述】:

使用 .Net 框架、Web Api。

我的控制器上有[Authorize] 属性,一些端点上有[AllowAnonymous]

我有几个端点允许匿名,但如果用户通过身份验证,则返回不同(更多)数据。

如果用户拥有过期的令牌,他们当前会获得匿名版本的数据。

我想做的是,如果请求标头中存在令牌并且令牌无效(通常是因为它已过期),我想返回 401,即使该方法标记为 [AllowAnonymous]

(这将触发客户端获取新令牌并获取经过身份验证的数据,而不是静默地仅获取数据的子集)

谢谢

编辑澄清:我正在寻找的是一个过滤器,它将检查 User.Identity.IsAuthenticated 是否为假,但请求中有一个授权持有者令牌,尽管该方法被标记为 [AllowAnonymous],但过滤器应该返回 401 .

【问题讨论】:

  • 是检查用户是否有过期令牌的问题,还是如何返回401的问题?
  • @PajLe,问题是返回 401
  • @PajLe 抱歉,我的回答不正确,请参阅对您的回答的附加评论。

标签: .net authentication webapi


【解决方案1】:

我通过覆盖 AuthorizeAttribute 来做到这一点。

public class AuthorizeCustomAttribute : System.Web.Http.AuthorizeAttribute
{

    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        if (actionContext == null)
        {
            throw new ArgumentNullException("actionContext");
        }

        if (SkipAuthorization(actionContext))
        {
            return;
        }

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

    private static bool SkipAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        //override default logic.
        //If there is a authorization header, return unauthorized even if method is marked AllowAnonymous

        System.Diagnostics.Contracts.Contract.Assert(actionContext != null);

        if (actionContext.ActionDescriptor.GetCustomAttributes<System.Web.Http.AllowAnonymousAttribute>().Any()
               || actionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes<System.Web.Http.AllowAnonymousAttribute>().Any())
        {

            if (actionContext.Request.Headers.Authorization == null) return true;
        }
        return false;
    }
}

【讨论】:

    猜你喜欢
    • 2019-01-04
    • 2017-03-14
    • 1970-01-01
    • 2021-04-21
    • 2021-06-29
    • 2022-06-29
    • 2022-10-18
    • 2018-11-08
    • 2015-09-09
    相关资源
    最近更新 更多