2013-04-29 165 views
1

我嘗試在ASP.NET MVC4中對我們的Netowrks NID使用LDAP身份驗證時遇到了問題。我正在使用專門爲此設計的ActiveDirectoryMembershipProvider中內置的ASP.NET。我知道我成功地聯繫了服務器,因爲如果我更改用戶名或密碼,我會得到無效的登錄錯誤。ActiveDirectoryMembershipProvider「發生本地錯誤。」

不幸的是,我收到的錯誤是非常不倫不類的。堆棧跟蹤說錯誤是類型ConfigurationErrorsException,這導致我相信我只是沒有正確配置一些東西。

這裏是我的Web.config文件的連接字符串:從Web.config文件

<connectionStrings> 
    <add name="ADConnectionString" connectionString="LDAP://authenticate.ad.mydomain.com/OU=NIDs,OU=Accounts,DC=ad,DC=mydomain,DC=com" /> 
</connectionStrings> 

的MembershipProvider配置:

<authentication mode="Forms"> 
     <forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="2880" slidingExpiration="false" protection="All" /> 
    </authentication> 
    <membership defaultProvider="ADMembershipProvider"> 
     <providers> 
      <clear /> 
      <add name="ADMembershipProvider" 
       type="System.Web.Security.ActiveDirectoryMembershipProvider" 
       connectionProtection="Secure" 
       connectionStringName="ADConnectionString" 
       connectionUsername="XXXXXXXXXX" 
       connectionPassword="XXXXXXXXXX" 
       attributeMapUsername="sAMAccountName"/> 
     </providers> 
    </membership> 

我的假設是,應用程序成功接觸到AD服務器下運行因爲如果我修改了用戶名/密碼中的任何內容,我會收到無效的服務器登錄錯誤。

目前,每當我嘗試驗證我得到以下錯誤:A local error has occurred.

堆棧跟蹤,事件日誌:

Exception type: ConfigurationErrorsException 
    Exception message: A local error has occurred. 
(C:\Users\wchristie\Documents\Visual Studio 2010\Projects\EZIDManager\EZIDManager\web.config line 26) 
    at System.Web.Configuration.ProvidersHelper.InstantiateProvider(ProviderSettings providerSettings, Type providerType) 
    at System.Web.Configuration.ProvidersHelper.InstantiateProviders(ProviderSettingsCollection configProviders, ProviderCollection providers, Type providerType) 
    at System.Web.Security.Membership.InitializeSettings(Boolean initializeGeneralSettings, RuntimeConfig appConfig, MembershipSection settings) 
    at System.Web.Security.Membership.Initialize() 
    at System.Web.Security.Membership.get_Provider() 
    at System.Web.Security.Membership.ValidateUser(String username, String password) 
    at EZIDManager.Controllers.AccountController.Login(LoginModel model, String returnUrl) in C:\Users\wchristie\Documents\Visual Studio 2010\Projects\EZIDManager\EZIDManager\Controllers\AccountController.cs:line 24 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) 
    at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) 
    at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

A local error has occurred. 

    at System.DirectoryServices.ActiveDirectory.Domain.GetDomain(DirectoryContext context) 
    at System.Web.Security.DirectoryInformation.InitializeDomainAndForestName() 
    at System.Web.Security.ActiveDirectoryMembershipProvider.Initialize(String name, NameValueCollection config) 
    at System.Web.Configuration.ProvidersHelper.InstantiateProvider(ProviderSettings providerSettings, Type providerType) 

A local error has occurred. 

    at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) 
    at System.DirectoryServices.DirectoryEntry.Bind() 
    at System.DirectoryServices.DirectoryEntry.get_AdsObject() 
    at System.DirectoryServices.PropertyValueCollection.PopulateList() 
    at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) 
    at System.DirectoryServices.PropertyCollection.get_Item(String propertyName) 
    at System.DirectoryServices.ActiveDirectory.Utils.CheckCapability(DirectoryEntry rootDSE, Capability capability) 
    at System.DirectoryServices.ActiveDirectory.Domain.GetDomain(DirectoryContext context) 

有沒有人遇到這個問題或知道什麼可能導致這個錯誤?這是我第一次使用ActiveDirectoryMembershipProvider,非常感謝任何幫助或建議。

+0

什麼是你的web.config的第26行?你是否指定了域用戶名?即MYDOMAIN \用戶名?我假設你沒有真正使用mydomain.com? – 2013-04-29 23:54:59

+0

26行是ADMembershipProvider行的。我不認爲這是用戶名/密碼。我也這麼認爲,但是當我改變其中任何一個時,我得到一個錯誤報告無法驗證。 – Wade 2013-04-30 04:10:10

回答

1

我已確定導致此錯誤的原因是我使用的帳戶無權綁定到AD域。

0

您的連接字符串可能是錯誤的。嘗試是這樣的:

connectionString="LDAP://mydomain.com/CN=Users,DC=mydomain,DC=com" /> 

也可以使用dsquery user -name YourUserName得到適當的連接字符串嘗試。