通过OWIN启动重定向控制器

时间:2018-10-19 08:34:22

标签: asp.net-core owin

我不是.net开发人员,所以接到了在现有.net应用程序中应用SSO的任务。 我已经为SSO添加了OWIN OpenIDConnect。我的项目不是MVC项目。现在,我的电话正在iisexpress服务器启动时通过Startup.cs进行。但是我的登录页面(login.aspx)被/login.aspx调用。 我想在登录页面上的提交按钮时调用启动。呼叫未通过启动。 我的ConfigureAuth方法是

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(Microsoft.Owin.Security.Cookies.CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new Microsoft.Owin.Security.Cookies.CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/login.ashx")
    });
    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            Authority = "Authority",
            ClientId = "ClientId",
            RequireHttpsMetadata = false,
            ClientSecret = "ClientSecret",
            Scope = OpenIdConnectScope.OpenIdProfile,
            ResponseType = OpenIdConnectResponseType.CodeIdToken,
            AuthenticationMode = AuthenticationMode.Active,
            Notifications = new OpenIdConnectAuthenticationNotifications()
            {
                RedirectToIdentityProvider = (context) =>
                {
                    //I'm able to break into this method
                    return Task.FromResult(0);
                },
                MessageReceived = (context) =>
                {
                    //doesn't seem to run this line
                    return Task.FromResult(0);
                },
                SecurityTokenReceived = (context) =>
                {
                    //doesn't seem to run this line
                    return Task.FromResult(0);
                },
                SecurityTokenValidated = (context) =>
                {
                    //doesn't seem to run this line
                    return Task.FromResult(0);
                },
                AuthorizationCodeReceived = (context) =>
                {
                    //doesn't seem to run this line
                    return Task.FromResult(0);
                },
                AuthenticationFailed = (context) =>
                {
                    //doesn't seem to run this line
                    return Task.FromResult(0);
                },
            }
         });

    System.Console.WriteLine("After OpenIdconfiguration");
}

请建议我如何通过启动类重定向Controller调用。

谢谢

1 个答案:

答案 0 :(得分:0)

简短的回答是,大多数代码将不会直接执行。这些是在身份验证过程中执行的事件。

更长的答案是,您需要为这些事件中的每一个实际填写哪些空白。有关OWIN的一些信息可能会有所帮助。

我认为OWIN是通向您应用程序的管道。该请求在到达您的应用程序之前先经过管道。当您的应用程序发送响应时,将再次使用此管道。在此过程中,存在称为“中间件”的组件,它们可以对请求和响应起作用。使用管道模型,将中间件视为管道中的阀门。中间件在导入时按顺序执行,在导出时按相反顺序执行。

回到您的代码。这行:

app.UseOpenIdConnectAuthentication(

告诉OWIN使用OpenIdConnect进行身份验证。您需要为OpenIdConnect流程中每个事件编写代码。第一个RedirectToIdentityProvider需要重定向(可能使用http 302)到您的身份提供者,该身份提供者可以是ForgeRock或PingIdentity或IdentityServer。每个事件都需要为其编写代码。

OpenIdConnect的整个主题相当广泛,而且有点复杂,可能比我在答案中可以实际完成的更多。但是有关该主题的资源很多。

我希望对您有帮助