【发布时间】:2013-07-30 07:17:22
【问题描述】:
我想在 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(字符串服务器, 字符串用户、字符串密码、布尔值信任、字符串 连接字符串)在 System.Web.Management.SqlServices.SetupApplicationServices(字符串 服务器,字符串用户,字符串密码,布尔值信任,字符串 连接字符串、字符串数据库、字符串 dbFileName、SqlFeatures 功能,布尔安装)在 System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(字符串 fullFileName,字符串数据目录,字符串连接字符串)
这里有什么问题?
【问题讨论】:
-
似乎由于某种原因配置不是从 web.config 加载,而是从 machine.config 文件加载。你能分享一些关于你的解决方案结构的信息吗?该服务类在哪里定义,如何以及在哪里调用?
-
@Andrei 你好!我有以下解决方案结构(6 个项目): MyProject.Data MyProject.Domain MyProject.Infrastructure MyProject.Presentation MyProject.Tests MyProject.Web web.config 位于 . Web 项目根目录。 Authentificate() 方法的服务类位于 .Domain 项目中。此方法是从 .Presentation 项目中的控制器类调用的。控制器正在使用来自 **.Web 项目的视图。如果需要,我可以添加任何其他信息。
-
应用程序的入口点在哪里?它是在 .Web 或 .Presentation 项目中,还是在其他地方?
-
@Andrei 在 .Presentation,类 Application,方法:protected void Application_Start() { WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }
标签: c# asp.net-mvc