首页 > 解决方案 > 自定义身份验证中间件 - 如何检查请求是匿名的还是授权的?

问题描述

我正在尝试编写自己的身份验证中间件代码。

在旧的 HttpModules 中,当请求“授权”页面时,我可以使用“OnAuthenticateRequest”。

我的中间件代码是这样的:

public async Task Invoke(HttpContext context)
{
    if (!context.User.Identity.IsAuthenticated)
    {
    }
}

...但这也将检查 IsAuthenticated 与 [AllowAnonymous] 属性的请求。

如何从我的中间件检查请求是否具有属性 [AllowAnonymous] 或 [Authorize]?

我需要能够做类似的事情......

public async Task Invoke(HttpContext context)
{
    if (HasAuthorizeAttribute && !context.User.Identity.IsAuthenticated)
    {
    }
    await _next.Invoke(context);
}

谢谢。

标签: c#asp.net-mvcasp.net-core

解决方案


有一种方法可以从中间件内部检查请求是否针对标记为 [匿名] 的页面。

//inside your middleware
var endpoint = context.GetEndpoint();
if (endpoint?.Metadata?.GetMetadata<IAllowAnonymous>() is object)
{
    await _next(context);
    return;
}

在此博客上找到的原始解决方案:Anonymous Aware Middleware


推荐阅读