c# - ASP.Net MVC 中的 LDAP 身份验证

标签 c# asp.net-mvc

我希望能够使用域用户 ID 和密码对用户进行身份验证,但默认的 ASP.Net MVC 应用程序允许用户注册用户 ID 和密码然后登录。我该怎么做?

我不希望用户能够注册;但是,他应该能够输入他的 Windows 域用户 ID 和密码,并由域服务器进行身份验证。

我见过的解决方案(例如 here on Mike's Blog)不要求用户输入他/她的 UserId 或密码。

如何让我的 ASP.Net MVC 应用程序显示登录表单并根据 Windows 域对用户进行身份验证?

如果可能,请用样本解释

最佳答案

这是在 Web 应用程序表单例份验证中执行此操作的方法,因此它可能需要针对 MVC 进行一些调整。使用 asp.net 成员资格和角色引擎。设置提供程序以使用 Active Directory 成员资格提供程序并使用表单进行身份验证。

<authentication mode="Forms">
  <forms name=".ADAuthCookie" 
         timeout="10"                     
         loginUrl="Login.aspx" 
         defaultUrl="Default.aspx">            
  </forms>

或者类似的东西....

提供者设置看起来像这样:

<membership defaultProvider="DomainLoginMembershipProvider">
  <providers>
    <add name="DomainLoginMembershipProvider"           
             type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"           
         connectionStringName="ADConnectionString"
         connectionProtection="Secure"
         connectionUsername="domainuser"
         connectionPassword="pwd"
         attributeMapUsername="sAMAccountName" 
         enableSearchMethods="false"/>
  </providers>
</membership>

连接保护、用户名和密码是针对有权代表系统查询AD的帐户。根据您网络的安全性,这可能必须进行设置,否则您将无法查询 AD 来验证用户。

您的连接字符串将类似于:

<connectionStrings>
  <add name="ADConnectionString"
       connectionString="LDAP://servername:port#/DC=domainname"/>
</connectionStrings>

连接字符串可以采用多种形式,因此您可能需要针对您的环境研究它。

对于登录页面,您可能必须执行身份验证方法并测试...

    e.Authenticated = Membership.ValidateUser(username, password);
    if (e.Authenticated == false)...

Stephen Shackow 的书“Professional ASP.Net 2.0 Security, Membership, and Role Management”很好地介绍了如何使用 AD 成员资格(第 12 章)。它不在 MVC 的上下文中,但配置和设置是相同的。

关于c# - ASP.Net MVC 中的 LDAP 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1401667/

相关文章:

c# - 用PagedList分页,效率高吗?

c# - 字符串相等与 null 处理

c# - GetType 和 typeof

c# - 构建将两个函数组合成一个复合函数的表达式树

asp.net - 如何将 MVC 帐户 Controller 添加到 Visual Studio 2013 中的 WebApi 项目?

css - 为什么我的 css 类没有在初始加载时触发?

c# - 将 MVC 操作结果发送到打印机

c# - 在 JSON API 调用 (CrunchBase) 中循环遍历 List<Objects>

javascript - 是否可以在 Controller 中从 JSON 对象更改为 JSON 数组

c# - 无法隐式转换类型 'System.Linq.IQueryable<AnonymousType#1>'