将 asp.net WebForms 应用程序中的组合表单/Windows 身份验证迁移到 asp.net MVC 应用程序

Posted

技术标签:

【中文标题】将 asp.net WebForms 应用程序中的组合表单/Windows 身份验证迁移到 asp.net MVC 应用程序【英文标题】:Migrating combined forms/windows authentication in asp.net WebForms application to asp.net MVC application 【发布时间】:2014-05-07 13:42:54 【问题描述】:

我有一个用 asp.net 编写的应用程序,我正在执行组合表单/Windows 身份验证。我想在 asp.MVC / webAPI 应用程序中复制这种身份验证方法,作为 MVC 新手,我在听取了一些建议。

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

我知道在 MVC 中使用会话变量是不受欢迎的,因为它违反了 RESTful 原则,但我想不出更好的方法来处理混合登录要求。我曾考虑过自定义会员提供程序,但这似乎有点过头了,而且我看不到它适用于可能在多台 PC 上登录的“通用”帐户。

目前,在 global.asax session_start 事件中,我首先在 request.servervariables("LOGON_USER") 中寻找一些东西,当 Windows 身份验证打开并且在 IIS 上关闭匿名身份验证时填充。如果找到了,那么我创建一个“用户”类的实例,并调用一个方法来仅根据他们的 Windows 登录对他们进行身份验证。如果他们验证成功,那么我会在整个应用程序中使用的会话中存储一个“currentUser”对象。

如果没有 LOGON_USER(或者如果在查询字符串中请求了不同的用户),那么我会在请求中查找 Request.QueryString("User") 和 Request.QueryString("Password")。如果两者都存在,则创建一个“用户”类的实例,并调用一个方法来使用用户名/密码进行身份验证。如果他们验证成功,那么我会在整个应用程序中使用的会话中存储一个“currentUser”对象。

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

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

感谢您的建议,

克里斯

【问题讨论】:

【参考方案1】:

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

您可以将 UserSession 控制器与获取和发布登录操作一起使用。 get 提供了一个包含用户名和密码表单的视图以及一个“使用 Windows 登录”按钮。

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

为确保其他控制器得到正确身份验证,您需要自定义授权过滤器来检查请求中是否附加了有效用户。

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

【讨论】:

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

以上是关于将 asp.net WebForms 应用程序中的组合表单/Windows 身份验证迁移到 asp.net MVC 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

asp.net webforms中Jquery Datatable中的分页

ASP.Net WebForms + Paypal 表单

asp.net webforms ajax 更新gridview

将 jQuery 用于 AJAX 与 ASP.NET Webforms [关闭]

ASP.NET WebForms 使用 jQuery v1.9.0 检查 GridView 中的所有复选框不起作用

如何将 Perl 与 ASP.NET Webforms 集成?