基于Windows用户名的Forms身份验证MVC应用程序自动登录,可行吗?

4
我有一个使用Forms身份验证的asp.net mvc应用程序,即用户/密码存储在数据库中。该应用程序由多个客户在自己的服务器上使用,其中一个客户希望其员工根据Intranet自动登录,因为似乎必须登录才能使用它!?
我相信您不能混合使用Windows和Forms身份验证,所以我的问题是,有没有办法以任何方式识别Windows / AD用户名或其他任何信息,以便我可以手动对其进行身份验证?我不需要通过Windows实际验证他们,我只需要以某种方式获取信息,以便我可以将其与数据库中的记录匹配。

虽然这是完全可能的,但您应该向我们提供您迄今为止尝试过的内容(例如,您在收集他们的AD用户方面遇到的特定问题)。 - JDupont
最近这个问题变得越来越常见,你需要构建一个自定义的提供者,而且相对来说比较复杂。 - Inspector Squirrel
你的所有用户的账户名与他们的Windows账户相同吗? - Inspector Squirrel
没有,但是有一个字段可以让他们输入AD用户名以进行匹配。 - user1166905
基本上,该应用程序具有自己的用户、安全组、权限等,可与应用程序的其余部分一起使用。 - user1166905
显示剩余2条评论
1个回答

0

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

我们有一个人力资源数据库,用于跟踪员工及其职称,基于此数据库中包含的数据,我们允许在应用程序中特定的权限:

我们公司仍在使用 Active Directory 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' ";

抱歉,我没有意识到。在这种情况下,您能否部署使用活动目录的应用程序并进行不同配置?绕过表单并使用活动目录 - Ben Kauffman
不,应用程序中有太多的事情需要处理,无法将其更改为与Windows身份验证一起工作。此外,使用Windows身份验证,他们基本上已经通过访问站点登录了,我想避免这种情况。 - user1166905
嗯...抱歉伙计,听起来你陷入了困境。如果我想到什么,我会告诉你的。 - Ben Kauffman
我认为你抓住了一些关键点!如果它有效,请告诉我,因为我认为这对我的某些应用程序将非常有用。 - Ben Kauffman
创建了一个cookie等,但在重定向时仍然得到登录屏幕,因此出于某种原因未传输。有什么想法吗? - user1166905
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接