1

我想在 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(字符串服务器,字符串用户,字符串密码,布尔值信任,字符串连接字符串,字符串数据库,字符串 dbFileName,SqlFeatures 功能,布尔安装)在 System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(字符串 fullFileName,字符串 dataDir,字符串 connectionString)

这里有什么问题?

4

1 回答 1

0

启动 .Net 应用程序时,它会从相应的配置文件中设置域设置。对于在 IIS 上运行的 Web 应用程序,这是web.condig, 对于可执行文件 -app.config实际上已重命名为executable_name.exe.config. 如果没有找到这样的文件 -machine.config正在获取来自的设置。这里重要的一点是,一个域中的所有程序集都使用相同的设置 - 与入口点程序集相关联的设置。并且不考虑其他设置!

在您的情况下,即使Web项目有一个web.config文件,入口点也是Presentation项目,因此基本上web.config不会以任何方式使用设置。这里最简单的解决方法是app.configPresentation项目定义并在其中包含所有必要的设置(如提供程序)。

于 2013-07-22T09:58:36.100 回答