在mvc 4应用程序中,使用AspNetSqlMembershipProvider而不是ActiveDirectoryM
本文关键字:AspNetSqlMembershipProvider ActiveDirectoryM 使用 mvc 应用程序 | 更新日期: 2023-09-27 18:23:49
我想在mvc 4应用程序中实现一个简单的AD身份验证。以下是我在web.config文件中更改的内容:
<connectionStrings>
<add name="ADConnectionString" connectionString="LDAP://test.com:636/DC=test,DC=com"/>
</connectionStrings>
...
<membership defaultProvider="ADMembershipProvider">
<providers>
<clear/>
<add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName"/>
</providers>
下面是我的服务类中使用AD身份验证的一个方法:
public bool Authentificate(string userName, string password)
{
var membershipSection = (MembershipSection)WebConfigurationManager.GetSection("system.web/membership");
string defaultProvider = membershipSection.DefaultProvider;
MembershipProvider provider = Membership.Providers[defaultProvider];
return provider != null && provider.ValidateUser(userName, password);
}
但当我调试应用程序时,我看到"defaultProvider"是"AspNetSqlMembershipProvider"而不是"ActiveDirectoryMembershipProvider",并且身份验证失败,并显示消息:
无法连接到SQL Server数据库。在System.Web.Management.SqlServices.GetSqlConnection(字符串服务器,字符串用户,字符串密码,布尔值可信,字符串connectionString)System.Web.Management.SqlServices.SetupApplicationServices(字符串服务器,字符串用户,字符串密码,布尔值可信,字符串connectionString,字符串数据库,字符串dbFileName,SqlFeatures功能,布尔安装)System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(字符串fullFileName、字符串dataDir、字符串connectionString)
这里怎么了?
启动.Net应用程序时,它会从相应的配置文件中设置域设置。对于在IIS上运行的web应用程序,这是web.condig
,对于可执行文件app.config
,它实际上已重命名为executable_name.exe.config
。如果找不到这样的文件,则从machine.config
中提取设置。这里的重要一点是,一个域中的所有程序集都使用相同的设置,即与入口点程序集关联的设置。并且不考虑其他设置!
在您的情况下,尽管Web项目有一个web.config
文件,但入口点是Presentation
项目,因此基本上不会以任何方式使用web.config
设置。这里最简单的修复方法是为Presentation项目定义app.config
,并在其中包含所有必要的设置(如提供者)。