分支ASP.NET核心管道身份验证

Muh*_*eed 3 asp.net owin-middleware asp.net-core-mvc asp.net-core

我的应用程序当前正在使用基本身份验证,但我想转换到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();
}
Run Code Online (Sandbox Code Playgroud)

如上所述,如果我检测到HTTP标头,则使用基本身份验证,否则我使用OAuth.

ade*_*lin 5

从技术上讲,你可以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
} 
Run Code Online (Sandbox Code Playgroud)

对于您的情况,身份验证中间件应该在自己的身份验证处理程序中处理这些条件,如果不匹配条件,则它会跳过.你不应该需要处理条件.所以你可以使用这些身份验证中间件:

app.UseBasicAuthentication();

app.UseOauthAuthentication();
Run Code Online (Sandbox Code Playgroud)