通过 OWIN 启动重定向控制器

Posted

技术标签:

【中文标题】通过 OWIN 启动重定向控制器【英文标题】:Redirecting Controller through OWIN startup 【发布时间】:2018-10-19 08:34:22 【问题描述】:

我不是 .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");

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

谢谢

【问题讨论】:

【参考方案1】:

简短的回答是大部分代码不会直接执行。这些是作为身份验证过程的一部分执行的事件。

更长的答案是,您需要填写每个事件实际需要发生的情况。一些关于 OWIN 的信息可能会有所帮助。

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

回到你的代码。这一行:

app.UseOpenIdConnectAuthentication(

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

OpenIdConnect 的整个主题相当广泛,而且有点复杂,可能比我在答案中实际能做的要多。但是有很多关于这个主题的资源。

希望对你有帮助

【讨论】:

以上是关于通过 OWIN 启动重定向控制器的主要内容,如果未能解决你的问题,请参考以下文章

检测应用程序是不是从推送通知启动/打开,然后将其重定向到特定视图控制器

容器在启动时重定向日志文件的方法

带有 OWIN 的 WebApi 2 - 授权挑战不会重定向到登录

Grails 重定向控制器从 https 切换到 http。为啥?

C# - 实时控制台输出重定向

如何通过在特定控制器和操作上使用 Ajax 调用来重定向用户 [重复]