在 ASP.NET Core MVC 1.1 中,我们有基于路径的身份验证,如下所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// /api/* path
app.UseWhen(ctx => IsApiRequest(ctx), subBranch =>
{
subBranch.UseApiAuth(GetApiAuthOptions());
});
// else
app.UseWhen(ctx => !IsApiRequest(ctx), subBranch =>
{
subBranch.UseOpenIdConnectAuthentication(GetOpenIdOptions());
});
}
现在我们要将它迁移到 ASP.NET Core MVC 2.0. 在新版本中,身份验证完全重新设计,在文档中我没有找到任何线索如何做到这一点。有任何想法如何迁移上面的代码?
1 回答
经过 2 天的测试和尝试,我找到了工作解决方案。
主要问题是,在 ASP.NET Core MVC 2.0 中,身份验证方法被注册为服务而非中间件。这意味着它们必须在
ConfigureServices
方法中而不是在Configure
中注册,因此在注册时无法创建分支。此外,auth 系统使用AuthenticationOptions
来确定将使用哪种身份验证方法。从我发现的测试结果来看,AuthenticationOptions
实例是在请求之间共享的,所以不能修改它以调整DefaultScheme
。经过一番挖掘,我发现IAuthenticationSchemeProvider
,可以覆盖以克服这些问题。这是代码:
中间件:
CustomAuthenticationSchemeProvider:
如果有人知道更好的解决方案,我很乐意看到它。