c# - 如何从 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 控制器。我希望它在我的自定义中间件运行之前也运行。有可能这样做吗?
解决方案
如果用户未通过身份验证,则在自定义中间件方法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 包。
上面的代码将运行默认的身份验证服务来验证用户。如果默认的是您的自定义身份验证中间件,那么它将被调用。
推荐阅读
- python - 谁能解释我们如何获得 numpy.poly 函数的输出
- apache-pig - 猪:取出内袋中的元组
- regex - 使用正则表达式从 OpenVPN 日志中捕获用户名
- javascript - NodeJS 缓冲区 - ASCII 二进制表示
- java - 从 Jenkins REST API 获取所有作业的所有构建的构建详细信息
- python - Matplotlib 在蒙面系列上插值
- html - 我想在标签内加载一个组件,该组件也使用 innerHTML 指令
- python - Python没有导入我的模块的更新版本
- javascript - Vue 插件错误:未定义 VueVirtualScroller
- wordpress - 如何在另一个页面中重定向 wordpress 登录用户?