分支 ASP.NET 核心管道身份验证
Branching ASP.NET Core Pipeline Authentication
我的应用程序当前使用的是基本身份验证,但我想过渡到 OAuth,因此在短时间内需要同时使用这两种类型的身份验证。有没有办法像这样分支我的 ASP.NET 核心管道:
public void Configure(IApplicationBuilder application)
{
application
.Use((context, next) =>
{
if (context.Request.Headers.ContainsKey("Basic"))
{
// Basic
}
else if (context.Request.Headers.ContainsKey("Authorization"))
{
// OAuth
}
return next();
})
.UseStaticFiles()
.UseMvc();
}
以上,如果我检测到 HTTP header,我将使用基本身份验证,否则我将使用 OAuth。
从技术上讲,您可以像这样使用 UseWhen
:
app.UseWhen(context => context.Request.Headers.ContainsKey("Basic"), appBuilder =>
{
// use basic middleware
}
app.UseWhen(context => context.Request.Headers.ContainsKey("Authorization"), appBuilder =>
{
// use oauth authentication
}
但是对于您的情况,身份验证中间件应该在自己的身份验证处理程序中处理这些条件,如果不匹配条件则跳过。你不应该需要处理条件。所以你可以只使用这些身份验证中间件:
app.UseBasicAuthentication();
app.UseOauthAuthentication();
我的应用程序当前使用的是基本身份验证,但我想过渡到 OAuth,因此在短时间内需要同时使用这两种类型的身份验证。有没有办法像这样分支我的 ASP.NET 核心管道:
public void Configure(IApplicationBuilder application)
{
application
.Use((context, next) =>
{
if (context.Request.Headers.ContainsKey("Basic"))
{
// Basic
}
else if (context.Request.Headers.ContainsKey("Authorization"))
{
// OAuth
}
return next();
})
.UseStaticFiles()
.UseMvc();
}
以上,如果我检测到 HTTP header,我将使用基本身份验证,否则我将使用 OAuth。
从技术上讲,您可以像这样使用 UseWhen
:
app.UseWhen(context => context.Request.Headers.ContainsKey("Basic"), appBuilder =>
{
// use basic middleware
}
app.UseWhen(context => context.Request.Headers.ContainsKey("Authorization"), appBuilder =>
{
// use oauth authentication
}
但是对于您的情况,身份验证中间件应该在自己的身份验证处理程序中处理这些条件,如果不匹配条件则跳过。你不应该需要处理条件。所以你可以只使用这些身份验证中间件:
app.UseBasicAuthentication();
app.UseOauthAuthentication();