我有一个用asp.net编写的应用程序,我正在执行组合表单/ Windows身份验证。我想在asp.MVC / webAPI应用程序中复制这种身份验证方法,并且作为一名MVC新手,是在听取了一些建议。
首先,我们使用这种认证组合的原因是支持单独/通用登录的混合,并允许使用以不同Windows用户身份登录的PC的用户仍然能够输入他们的登录凭据访问系统,而系统将自动登录,如果他们使用他们的Windows凭据登录到他们的PC(我希望这是有道理的!)。
我知道在MVC中使用会话变量是不受欢迎的,因为它违反了RESTful原则,但我无法找到更好的方法来处理混合登录要求。我考虑过一个自定义会员提供商,但这似乎有点过分了。我无法看到它适用于' generic'可以在多台PC上登录的帐户。
目前,在global.asax session_start事件中,我首先在request.servervariables(" LOGON_USER")中查找内容,当启用Windows身份验证并且IIS上的匿名身份验证关闭时,将填充此内容。如果找到这个,那么我创建一个用户'的实例。类并调用一个方法来完全基于他们的Windows登录验证它们。如果他们验证确定,那么我会存储一个' currentUser'整个应用程序中使用的会话中的对象。
如果没有LOGON_USER(或者在查询字符串中请求了不同的用户),那么我会查找Request.QueryString(" User")和Request.QueryString(" Password" )在请求中。如果两者都存在,那么“用户”的实例就会出现。创建了一个类,并使用用户名/密码调用了一个方法进行身份验证。如果他们验证确定,那么我会存储一个' currentUser'整个应用程序中使用的会话中的对象。
如果身份验证失败,则会将用户重定向到登录页面。
知道如何在MVC中实现这一目标吗?如何执行重定向?还有更多的MVC'这样做的方式?
感谢您的任何建议,
克里斯
答案 0 :(得分:0)
将会话数据存储在RESTful应用程序中是合适的。重要的是它不是由其他行为产生的任何副作用造成的。
您可以将UserSession控制器与get和post Login操作一起使用。 get提供了一个包含用户名和密码表单的视图以及一个“使用Windows登录”按钮。
如果提供了用户名和密码,则post操作可以验证详细信息并创建要存储在会话中的当前用户对象。如果按下登录窗口按钮,则当前用户对象可以标记应该使用窗口标识。
为确保对其他控制器进行适当的身份验证,您需要使用自定义授权过滤器来检查是否有附加到请求的有效用户。
如果您愿意使用ASP.NET MVC 5,则同时存在身份验证和授权过滤器。这将使你想要做的事情更容易阅读。