2013-03-15 9 views
1

Я заменил наше доменное имя на «demo» ..., пожалуйста, игнорируйте отсутствующие запятые и т. Д. На изображении ниже.Неисправность Аутентификация пользователей ASP.NET против Active Directory

Мой вопрос заключается в следующем:

Я хочу, чтобы подтвердить подлинность SBSUsers в моем веб-приложение ASP.NET. Я не могу понять, каким должен быть мой активный путь к каталогу, чтобы заставить его работать ...

Когда я установил его следующим образом, он не аутентифицируется (я предполагаю, что мои пользователи не находятся под этим путем). .. но это не дает мне ошибку:

string adPath = "LDAP://ac-dc01.demo.local:389/CN=Configuration,DC=demo,DC=local"; 
string domainAndUsername = domain + @"\" + username; 
DirectoryEntry entry = new DirectoryEntry(adPath, domainAndUsername, pwd); 
// Bind to the native AdsObject to force authentication. 
Object obj = entry.NativeObject; 
DirectorySearcher search = new DirectorySearcher(entry); 
search.Filter = "(SAMAccountName=" + username + ")"; 
search.PropertiesToLoad.Add("cn"); 
SearchResult result = search.FindOne(); 
if (null == result) 
{ 
    return false; 
} 
// Update the new path to the user in the directory 
adPath = result.Path; 
_filterAttribute = (String)result.Properties["cn"][0]; 

Когда я поставил его на то, что я думаю, что это должно быть, это ошибки на линии entry.NativeObject.

string adPath = "ldap://ac-dc01.demo.local:389/OU=SBSUsers,OU=Users,OU=MyBusiness,DC=demo,DC=local"; 

Любые идеи? Нужно ли мне как-то открывать его для «глобального» доступа? Если да, то как мне это сделать?

LDAP

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

LDAP

+0

Что ошибка это дает вам? –

+1

"* ... это ошибки на входе. Строка объекта. *" - Сообщите нам ошибку, глупо. – jadarnel27

+0

Ошибка в DirectoryEntry.Bind ... Неизвестная ошибка (0x80005000) – daniel

ответ

1

это то, что вы можете попробовать .. также вы уверены, что ваш DC = Demo и DC = Local те выглядят как OU ко мне

const string Domain = "ServerAddress:389"; 
const string constrParts = @"OU=Users,DC=domain,DC=com"; 
const string Username = @"someusername"; 
PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, Domain, constrParts); 
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(principalContext, username); 
+0

I попробовал это, и я получаю сообщение об ошибке при создании объекта PrincipalContext: «С сервером нельзя связаться». Я подозреваю, что это и оригинальная проблема. – daniel

+0

Я копирую/вставляю URL-адрес от администратора LDAP от Softerra. Имеет ли это какое-либо отношение к тому факту, что тот, который * работает *, имеет url как имя узла? Недоступен ли узел «Пользователи»? – daniel

+0

Звучит так: Right/Permissions о том, как вы это делаете. 389 не использует SSL или что-то в этом роде. Не удивляйтесь, если у вас есть эта настройка на стороне AD .. вы посмотрели на другой ответ, который я опубликовал на моем оригинальном размещении в к чему и почему эта ошибка означает? – MethodMan

1

Это, как мы подключаем к нашей эры и он прекрасно работает:

<yourConfig>LDAP://ADServerName/OU=GROUPNAME,DC=domainName,DC=com</YourConfig> 

И вот пример кода о том, как вы можете проверить пользователя:

using (PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, 
                  ENTER YOUR DOMAIN NAME, 
                  This is where the config that I mentioned above comes in, 
                  ContextOptions.Negotiate, 
                  ENTER YOUR AD SERVICE NAME, 
                  ENTER YOUR AD PASSWORD)) 
      { 
       UserPrincipal oUser = UserPrincipal.FindByIdentity(oPrincipalContext, THE USERNAME THAT YOU WANT TO VALIDATE); 
       if (oUser != null) 
       { 
        oADAcct = new CUserADAcct(); 
        oADAcct.dumpAcctAttrs(oUser); 
       } 
      } 
Смежные вопросы