我希望能够使用域用户 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/