首页 > 解决方案 > 如何从 ASP.NET Core 2.0 中的自定义中间件请求身份验证

问题描述

我有两个自定义 ASP.NET Core 中间件:一个用于身份验证(注册自己的身份验证方案),另一个用于某些业务工作。

如何在另一个中间件中使用身份验证中间件?我可以在这样的 MVC 中轻松使用身份验证:

 services.AddMvc(config =>
 {
     var policy = new AuthorizationPolicyBuilder()
                      .RequireAuthenticatedUser()
                      .Build();
     config.Filters.Add(new AuthorizeFilter(policy));
 });

我还可以AuthenticationSchemeProvider根据请求的 URL 提供我自己的使用不同的身份验证方案。但身份验证中间件仅适用于 MVC 控制器。我希望它在我的自定义中间件运行之前也运行。有可能这样做吗?

标签: c#asp.net-coreasp.net-core-middleware

解决方案


如果用户未通过身份验证,则在自定义中间件方法Invoke()调用中:ChallengeAsync()

public async Task Invoke(HttpContext httpContext, IServiceProvider serviceProvider)
{
    if (!httpContext.User.Identity.IsAuthenticated)
    {
        await httpContext.ChallengeAsync();
    }
    else { /* logic here */ }
}

Microsoft.AspNetCore.Authentication.Abstractions必须添加NuGet 包。

上面的代码将运行默认的身份验证服务来验证用户。如果默认的是您的自定义身份验证中间件,那么它将被调用。


推荐阅读