将asp.net WebForms应用程序中的组合窗体/windows身份验证迁移到asp.net MVC应用程序

将asp.net WebForms应用程序中的组合窗体/windows身份验证迁移到asp.net MVC应用程序,asp.net,asp.net-mvc-4,Asp.net,Asp.net Mvc 4,我有一个用asp.net编写的应用程序,我在其中执行组合窗体/windows身份验证。我想在asp.MVC/webAPI应用程序中复制这种身份验证方法,作为MVC新手,我需要一些建议 首先,,我们使用这种混合身份验证的原因是为了支持个人/通用登录的混合,并允许使用以不同windows用户身份登录的PC的用户仍然能够输入其登录凭据以访问系统,同时,如果他们使用windows用户登录到PC,系统将自动登录我希望这是有意义的 我知道在MVC中使用会话变量是不受欢迎的,因为它违反了RESTful原则,但

我有一个用asp.net编写的应用程序,我在其中执行组合窗体/windows身份验证。我想在asp.MVC/webAPI应用程序中复制这种身份验证方法,作为MVC新手,我需要一些建议

首先,,我们使用这种混合身份验证的原因是为了支持个人/通用登录的混合,并允许使用以不同windows用户身份登录的PC的用户仍然能够输入其登录凭据以访问系统,同时,如果他们使用windows用户登录到PC,系统将自动登录我希望这是有意义的

我知道在MVC中使用会话变量是不受欢迎的,因为它违反了RESTful原则,但我无法找到更好的方法来处理混合登录需求。我曾考虑过定制会员资格提供商,但这似乎有些过分&我看不出它适用于可能登录多台PC的“通用”帐户

目前,在global.asax session\u start事件中,我首先在request.servervariablesLOGON\u USER中查找某些内容,当IIS上的windows身份验证打开且anon身份验证关闭时,将填充此内容。如果发现了这一点,那么我将创建一个“user”类的实例,并调用一个方法来仅根据其windows登录对其进行身份验证。如果他们的身份验证正常,那么我将在整个应用程序中使用的会话中存储一个“currentUser”对象

如果没有登录用户,或者如果在querystring中请求了其他用户,那么我将在请求中查找Request.QueryStringUser和Request.QueryStringPassword。如果两者都存在,则会创建一个“user”类的实例,并调用一个方法以使用用户名/密码进行身份验证。如果他们的身份验证正常,那么我将在整个应用程序中使用的会话中存储一个“currentUser”对象

如果身份验证失败,则会将用户重定向到登录页面

你知道我将如何在MVC中实现这一点吗?如何执行重定向?有没有一种更“MVC”的方式来做到这一点

谢谢你的建议


Chris

将会话数据存储在RESTful应用程序中是合适的。重要的是,它不是由其他动作的任何副作用造成的

您可以将UserSession控制器用于获取和登录后操作。get提供了一个带有用户名和密码表单的视图,以及一个使用windows登录的按钮

如果提供了用户名和密码,post操作可以验证详细信息并创建要存储在会话中的当前用户对象。如果按下“使用windows登录”按钮,则当前用户对象可以标记应使用windows标识

为了确保其他控制器经过正确的身份验证,您需要一个自定义授权筛选器来检查请求是否附加了有效的用户


如果您愿意使用ASP.NET MVC 5,则有身份验证和授权筛选器。这将使您要做的事情更容易阅读。

谢谢Simon。好的,所以在会话中存储一个“当前用户”是很好的选择-然后可以与检查会话对象的自定义授权筛选器一起使用我认为它相对容易插入,以便在控制器方法修饰为?时使用它?。对于Windows身份验证,我不希望它“正常工作”,即当会话启动时,它具有Windows登录,在数据库中找到相关用户,并创建要存储在会话中的当前用户对象。global.asax session\u start仍然是执行此操作的最佳位置吗?检查现有windows登录应该是usersession控制器上的另一个操作。授权筛选器应该重定向到该操作。好的,我已经实现了一个自定义成员资格提供程序。使用表单身份验证GET Logon Controller操作查找Logon_用户服务器变量:如果找到一个,则使用此变量对用户进行身份验证:否则,用户将显示登录表单。只剩下一个问题-假设用户访问该站点,则会识别其windows登录并登录。假设这是链接到一个通用windows登录和一个系统管理员,然后想让他们来用自己的登录做系统管理员的事情:如果他们尝试注销,这将立即让他们重新登录,因此,如果不注销windows,他们就无法切换用户。有没有办法解决这个问题?这需要一个切换用户操作。显示窗体并覆盖使用windows身份验证创建当前用户的内容。