在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)

这里怎么了?

在mvc 4应用程序中,使用AspNetSqlMembershipProvider而不是ActiveDirectoryM

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

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

相关文章:
  • 没有找到相关文章