2013-04-29 2 views
1

Я столкнулся с проблемой при попытке использовать аутентификацию LDAP против NID Netowrks в ASP.NET MVC4. Я использую ASP.NET, встроенный в ActiveDirectoryMembershipProvider, который предназначен именно для этой цели. Я знаю, что я успешно связываюсь с сервером, потому что, если я изменяю имя пользователя или пароль, я получаю неверную ошибку входа.ActiveDirectoryMembershipProvider «Произошла локальная ошибка».

К сожалению, ошибка, которую я получаю, очень неописуема. Трассировка стека говорит, что ошибка имеет тип ConfigurationErrorsException, что заставляет меня думать, что я просто ничего не настроил.

Вот моя строка подключения из Web.config:

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

конфигурация MembershipProvider из Web.config:

<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 потому что, если я изменяю что-либо в своем Username/Password, я получаю неверную ошибку входа в сервер.

В настоящее время, когда я пытаюсь проверить подлинность я получаю следующее сообщение об ошибке: 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

Что такое строка 26 вашего web.config? Вы указываете имя пользователя домена? т.е. MYDOMAIN \ Username? Я полагаю, вы не используете mydomain.com? –

+0

Строка 26 - линия ADMembershipProvider. Я не думаю, что это имя пользователя/пароль. Я тоже это думал, но когда я меняю любой из них, я получаю сообщение об ошибке, неспособное аутентифицироваться. – Wade

ответ

1

Я определил причину этой ошибки - учетная запись, которую я использую, не имеет прав на привязку к домену AD.

0

Возможно, ваша строка подключения неверна. Попробуйте что-то вроде этого:

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

Вы также можете попробовать использовать dsquery user -name YourUserName, чтобы получить правильную строку подключения.