关键词:
【中文标题】如何从 ASP.NET Core 2.0 中的自定义中间件请求身份验证【英文标题】:How to request authentication from custom middleware in ASP.NET Core 2.0 【发布时间】:2018-10-21 18:41:09 【问题描述】:我有两个自定义 ASP.NET Core 中间件:一个用于身份验证(注册自己的身份验证方案),另一个用于某些业务工作。
如何在另一个中间件中使用身份验证中间件?我可以在这样的 MVC 中轻松使用身份验证:
services.AddMvc(config =>
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
);
我还可以提供我自己的AuthenticationSchemeProvider
以根据请求的 URL 使用不同的身份验证方案。但身份验证中间件仅适用于 MVC 控制器。我希望它在我的自定义中间件运行之前也运行。有可能吗?
【问题讨论】:
这是一个自己调用 authz 的例子。 github.com/aspnet/AuthSamples/blob/… 【参考方案1】:在自定义中间件方法Invoke()
调用ChallengeAsync()
如果用户未通过身份验证:
public async Task Invoke(HttpContext httpContext, IServiceProvider serviceProvider)
if (!httpContext.User.Identity.IsAuthenticated)
await httpContext.ChallengeAsync();
else /* logic here */
必须添加 NuGet 包 Microsoft.AspNetCore.Authentication.Abstractions
。
以上代码将运行默认的身份验证服务来对用户进行身份验证。如果默认的是您的自定义身份验证中间件,那么它将被调用。
【讨论】:
等待 httpContext.ChallengeAsync();很有帮助。但是 httpContext.User.Identity.IsAuthenticated 总是假的 @FemilShajin 您可能需要添加对 context.Request.Path 的检查,具体取决于您使用的身份验证提供程序。有关示例,请参见 ***.com/questions/53088514/…。【参考方案2】:这是基于Rython
对使用Windows身份验证的具体情况的回答,但也允许设计的控制器使用其他类型的身份验证:
/// <summary>
/// checks if current request resource can be accesses without being Windows-authenticated
/// </summary>
/// <param name="context">http context</param>
/// <returns>true if non-Windows is allowed. Otherwise, false</returns>
public static bool IsAllowedWithoutWindowsAuth(HttpContext context)
bool isAllowedWithoutWindowsAuth = context.Request.Method == "OPTIONS" ||
AllowedControllers.Any(c =>
string path = context.Request.Path.ToString();
return path.StartsWith(c, StringComparison.InvariantCulture);
);
return isAllowedWithoutWindowsAuth;
// custom middleware code
public async Task Invoke(HttpContext context)
// anonymous path, skipping
if (IsAllowedWithoutWindowsAuth(context))
await _next(context);
return;
if (!context.User.Identity.IsAuthenticated)
await context.ChallengeAsync("Windows");
return;
// other code here
await _next(context);
【讨论】:
从 ASP.NET Core 2.0 API 中的 JWT 令牌获取声明
...分使用cookie,而在API部分,我想使用JWT令牌。我的问题是如何从JWTt 查看详情
如何将 UserManager 注入 ASP.NET Core 2.0 中的另一个服务
】如何将UserManager注入ASP.NETCore2.0中的另一个服务【英文标题】:HowtoinjectUserManagertoanotherserviceinASP.NETCore2.0【发布时间】:2018-11-2002:43:30【问题描述】:我创建了一个使用用户管理员身份的服务publicclassUserManagerService:IUserManagerServi... 查看详情
ASP.NET CORE 2.0 中的 FromUri
】ASP.NETCORE2.0中的FromUri【英文标题】:FromUriinASP.NETCORE2.0【发布时间】:2018-06-2001:41:53【问题描述】:这个问题是因为在我使用ASP.NETCORE2.0的MVC项目中,我无法将[FromUri]attribute添加到我的驱动程序中。我尝试使用像System.Web.Http这... 查看详情
Asp.Net Core 2.0 中的“HttpPostedFileBase”
...用API(使用.NETCore2.0开发)的ReactJS应用程序。我的问题是如何在.NETCore2.0API中使用HttpPostedFileBase以获取文件内容并将其保存在数据库中。【 查看详情
ASP.Net Core 2.0 - 如何从中间件返回自定义 json 或 xml 响应?
】ASP.NetCore2.0-如何从中间件返回自定义json或xml响应?【英文标题】:ASP.NetCore2.0-Howtoreturncustomjsonorxmlresponsefrommiddleware?【发布时间】:2018-08-2414:09:25【问题描述】:在ASP.NetCore2.0中,我试图返回格式为json或xml的消息,并带有状态... 查看详情
ASP.Net Core 2.0 如何获取中间件中的所有请求标头? [复制]
】ASP.NetCore2.0如何获取中间件中的所有请求标头?[复制]【英文标题】:ASP.NetCore2.0Howtogetallrequestheadersinmiddleware?[duplicate]【发布时间】:2018-08-2418:06:34【问题描述】:在ASP.NetCore2.0中,我尝试在自定义中间件中验证传入的请求标头... 查看详情
ASP.NET Core 2.0 中的应用程序变量
...nASP.NETCore2.0【发布时间】:2018-07-1619:15:45【问题描述】:如何在ASP.NETCore2.0中设置和访问应用程序范围的变量?详情:我有一个变量,我们称它为CompanyName,它驻留在数据库中,几乎用于每个页面。我不想每次需要显示CompanyName时... 查看详情
ASP.NET Core 3.1 中的 Ocelot API Gateway 自定义聚合器问题
】ASP.NETCore3.1中的OcelotAPIGateway自定义聚合器问题【英文标题】:OcelotAPIGatewayCustomAggregatorIssueinASP.NETCore3.1【发布时间】:2021-01-2201:23:10【问题描述】:我在ASP.NET中使用Ocelot实现自定义聚合器,它在Startup.csOcelot中间件中引发错误... 查看详情
ASP.NET Core 2.0 中的多个身份
】ASP.NETCore2.0中的多个身份【英文标题】:MultipleIdentitiesinASP.NETCore2.0【发布时间】:2018-05-0602:34:40【问题描述】:我正在将ASP.NETCore1.0应用程序迁移到ASP.NETCore2.0。在我的启动中,我正在配置两个身份:services.AddIdentity<IdentityUse... 查看详情
ASP.net Core 2.0 Preview 配置中的 appsettings.json GetSection null
】ASP.netCore2.0Preview配置中的appsettings.jsonGetSectionnull【英文标题】:appsettings.jsoninASP.netCore2.0PreviewconfigurationGetSectionnull【发布时间】:2017-12-1506:29:21【问题描述】:我试图从Startup.cs中的注入配置中调用GetSection。值为null,而indexer... 查看详情
如何使用 asp.net core 2.0 Razor 页面执行下载操作
】如何使用asp.netcore2.0Razor页面执行下载操作【英文标题】:HowtoperformDownloadOperationusingasp.netcore2.0RazorPage【发布时间】:2019-06-2521:43:25【问题描述】:我正在开发文档管理系统,我已成功完成上传和删除文件,但我无法执行从数... 查看详情
没有身份的 ASP.NET Core 2.0 承载身份验证
...做的事情的列表:实现不记名令牌保护的webapi从同一项目中的端点发布令牌和刷新 查看详情
如何使用 Url.Action 在 asp.net core 2.0 razor 页面中传递多个操作
】如何使用Url.Action在asp.netcore2.0razor页面中传递多个操作【英文标题】:Howtopassmultipleactionsinasp.netcore2.0razorpageusingUrl.Action【发布时间】:2018-07-1514:45:23【问题描述】:我想使用@Url.Action通过ASP.NETCore2.0Razor页面中的URL传递多个参数... 查看详情
如何从 ASP.NET Core 中的密码重置令牌中检索用户?
】如何从ASP.NETCore中的密码重置令牌中检索用户?【英文标题】:HowcanIretrieveauserfromapasswordresettokeninASP.NETCore?【发布时间】:2020-05-0417:22:46【问题描述】:我有一个ASP.NETCore2.1Web应用程序,并且正在添加忘记密码功能。我看过几... 查看详情
如何使用 ASP.NET Core 从 DbContext 中的 JWT 获取用户名?
】如何使用ASP.NETCore从DbContext中的JWT获取用户名?【英文标题】:HowtogetusernamefromJWTinDbContextusingASP.NETCore?【发布时间】:2018-11-2300:46:00【问题描述】:在MyDbContext中,我有方法LogChanges,它使用以下信息记录我的logs表中的任何更改... 查看详情
ASP.NET Core 2.0 Razor 页面使用 AddMvcCore() 而不是 AddMvc()
...AddMvc(),而是更喜欢使用AddMvcCore()。话虽如此,我想知道如何使用新的(从2.0开始)AddRazorPages 查看详情
如何使用目录名称中的句点从 Asp .Net Core 提供静态文件
】如何使用目录名称中的句点从Asp.NetCore提供静态文件【英文标题】:HowtoservestaticfilefromAsp.NetCorewithperiodindirectoryname【发布时间】:2020-04-0918:28:01【问题描述】:我目前正在尝试将ApplePay与网站相关联。为了验证域,ApplePay要求网... 查看详情
如何在 ASP.NET Core 2.0 中预编译视图?
】如何在ASP.NETCore2.0中预编译视图?【英文标题】:HowtoprecompileviewsinASP.NETCore2.0?【发布时间】:2018-09-0919:29:48【问题描述】:我根据article设置了我的解决方案。我省略了一些内容,因为根据this,ASP.NETCore2.0默认预编译视图。最... 查看详情