#sharepoint #active-directory
#sharepoint #active-directory
Вопрос:
В SharePoint я хотел бы узнать всех пользователей, которым был предоставлен доступ к сайту.
Если пользователю напрямую предоставлены разрешения, предоставлены разрешения через группу SharePoint или предоставлены разрешения через группу домена; тогда я могу получить необходимую информацию.
Однако, если пользователю предоставлены разрешения через группу «аутентифицированные пользователи», я не уверен, как найти список пользователей, связанных с этой группой.
Возможно ли это?
Ответ №1:
Это скорее .Чистый вопрос, чем вопрос Sharepoint. Да, вы можете это сделать — используйте AD API для запроса списка всех пользователей к вашему контроллеру домена. Вот некоторый код, который поможет вам начать работу с программным доступом к AD:
http://www.codeproject.com/KB/system/everythingInAD.aspx
Вы могли бы попробовать выполнить запрос для всех объектов в AD, которые являются пользователями.
Пожалуйста, обратите внимание, что при этом не будут перечислены какие-либо пользователи за пределами AD, которые могли бы иметь доступ к содержимому Sharepoint. Кроме того, если у вас несколько доменов, обязательно запросите все домены AD, которые могут иметь доступ к серверу Sharepoint.
Ответ №2:
Кайл, спасибо за ответ.
Используя эту информацию, я придумал следующее, чтобы получить всех пользователей во всех доменах:
private List<Principal> GetAllAuthenticatedUsers()
{
List<Principal> users = new List<string>();
foreach (string domain in GetAllDomains())
{
try
{
PrincipalContext context = new PrincipalContext(ContextType.Domain, domain);
// Create search condition for all enabled users
PrincipalSearcher searcher = new PrincipalSearcher();
UserPrincipal user = new UserPrincipal(context);
user.Enabled = true;
user.Name = "*";
searcher.QueryFilter = user;
// Get the users
System.DirectoryServices.AccountManagement.PrincipalSearchResult<Principal> results = searcher.FindAll();
foreach (Principal principal in results)
{
users.Add(principal);
}
}
catch
{
}
}
return users;
}
private static List<string> GetAllDomains()
{
List<string> domains = new List<string>();
using (Forest forest = Forest.GetCurrentForest())
{
foreach (Domain domain in forest.Domains)
{
domains.Add(domain.Name);
}
}
return domains;
}
Комментарии:
1. Эта группа означает любого, у кого есть действительные учетные данные. Если вы работаете со средой SP, которая использует Active Directory в качестве источника аутентификации / авторизации, то это буквально означает любую текущую учетную запись с истекшим сроком действия в каталоге.