首页 文章

ASP.NET Core,MVC和OWIN

提问于
浏览
2

我正在将旧应用程序迁移到 ASP.NET core/MVC . 此应用程序使用一些OWIN中间件来管理身份验证 .

使用“UseOwinAppBuilder”注册时,中间件工作正常,但是,在应用程序的某些部分,我需要获得“Owin上下文”才能使用身份验证 . “旧”代码的作用如下:

var context = Request.GetOwinContext();
var authentication = context.Authentication.AuthenticateAsync("AuthScheme");

我知道在ASP.NET核心中我可以使用 HttpContext.Authentication.AuthenticateAsync 管理身份验证,但是如果我替换上一行

var authentication = HttpContext.Authenticaiton.AuthenticateAsync("AuthScheme");

我收到一个错误:

“没有配置身份验证处理程序来验证方案:AuthScheme”

我怀疑发生了错误,因为身份验证中间件是使用OWIN注册的,而不是在ASP.NET Core中注册的 .

我知道有一些对象允许创建“OwinEnvironment”并访问“OwinFeatureCollection”,但我不确定这是否可以访问“旧”Owin上下文(我找不到详细信息)有关这些对象如何工作的文档) .

概述:是否有一些方法可以访问ASP.NET Core中的“旧”Owin上下文,以便使用已注册的中间件管理身份验证?

1 回答

  • 0

    根据您正在使用的身份验证,您可能需要检查Startup.cs文件以确保身份验证方案设置正确 .

    例如,如果您在ASP.NET Core中使用Cookie身份验证中间件...

    var testOptions = new CookieAuthenticationOptions()
    {
         AutomaticAuthenticate = true,
         AutomaticChallenge = false,
         SessionStore = new CacheTicketStore(cache),
         AuthenticationScheme = "AuthScheme"
    };
    app.UseCookieAuthentication(testOptions);
    

    如果您正在使用JWT令牌身份验证,您会看到类似这样的内容......

    app.UseJwtBearerAuthentication(new JwtBearerOptions
    {
        // authority and app id settings omitted
        AuthenticationScheme = "AuthScheme"
    });
    

    Auth中间件通常还带有一些众所周知的常量,因此您可以使用该提供程序的默认值 .

    using Microsoft.AspNetCore.Authentication.Cookies;
    ...
    context.Authentication.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);
    

    如果您的身份验证中间件刚刚使用app.UseMagicAuthentication()进行设置,则可以检查它是否将选项作为参数 .

相关问题