【发布时间】: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”的方式来做到这一点?
感谢您的建议,
克里斯
【问题讨论】:
标签: asp.net asp.net-mvc-4