可以基于Windows用户名自动登录Forms认证的MVC应用程序吗?

时间:2015-07-17 14:17:47

标签: c# asp.net asp.net-mvc authentication

我有一个使用表单身份验证的asp.net mvc应用程序,即用户/密码在数据库中。这个应用程序被他们自己的服务器上的几个客户使用,并且他们希望他们的员工按照Intranet自动登录,因为显然必须登录会阻止他们使用它!?!

我相信你不能混合使用Windows和Forms身份验证,所以我的问题是,无论如何都要识别windows / ad用户名或其他任何东西,以便我可以手动验证它们吗?我不需要通过Windows实际验证它们我只需要以某种方式获取信息,这将允许我将它们与数据库中的记录相匹配。

1 个答案:

答案 0 :(得分:0)

我做过类似的事情。 您需要配置IIS以启用Windows身份验证。 如果他们的AD帐户与其Web应用程序的标识匹配(或者只是在表单身份验证数据库中添加AD ID列),则可以从其用户名中删除该域,然后根据您的身份验证数据库对其进行验证。

我有一个人力资源数据库,用于跟踪员工及其职位,根据此数据库中包含的数据,我们允许整个应用程序中的某些权限:

我们公司仍处于活动目录2003中,因此如果没有找到创意解决方案,就无法管理凭据。

这是我的代码:         //找出Active Directory用户是谁         var username = Convert.ToString(User.Identity.Name);

    // strip the domain
    username = Regex.Replace(username, "DOMAIN", "");
    username = Regex.Replace(username, "\\\\", "");


    var first_initial = username[0];
    var last_initial = username[1];
    //The Ative directory structure is [first initial firstname][first inital lastname][badge number]
    var EIN = Regex.Replace(username, "[^0-9]", "");//get the badge number so we can query the badging database


    // check the employee database to see if this AD account matches something 
    var query = "SELECT BadgeNumber, FirstName, LastName,  DEPT_NUM, DEPT, TITLE, Supervisor " +
                     "FROM TABLE_WITH EMPLOYEE INFORMATION " +
                     "WHERE LEFT(FirstName, 1) = '" + first_initial + "' AND LEFT(LastName, 1) = '" + last_initial + "' AND BadgeNumber = '" + EIN + "' AND STATUS = 'Active' ";