Quero escrever uma consulta LDAP que testa se um usuário (sAMAccountName) é membro de um grupo específico. É possível fazer isso para obter 0 ou 1 resultado?
Acho que posso obter todos os grupos para o usuário e testar cada um para uma correspondência, mas estava pensando se poderia agrupá-lo em uma expressão LDAP.
Alguma ideia?
obrigado
Respostas:
Você deve conseguir criar uma consulta com este filtro aqui:
e quando você executa isso no servidor LDAP, se obtiver um resultado, o usuário "yourUserName" é realmente um membro do grupo "CN = YourGroup, OU = Users, DC = YourDomain, DC = com
Experimente e veja se isso funciona!
Se você usa C # / VB.Net e System.DirectoryServices, esse trecho deve fazer o truque:
Palavra de cautela: isso testará apenas associações imediatas de grupos e não será membro do que é chamado de "grupo principal" (geralmente "cn = Usuários") em seu domínio. Ele não lida com associações aninhadas, por exemplo, o Usuário A é membro do Grupo A, que é membro do Grupo B - o fato de que o Usuário A é realmente um membro do Grupo B também não se reflete aqui.
Marc
fonte
Se você estiver usando o OpenLDAP (isto é, slapd), que é comum nos servidores Linux, habilite o membro da sobreposição para poder corresponder a um filtro usando o atributo (memberOf = XXX).
Além disso, depois de ativar a sobreposição, ela não atualiza os atributos memberOf para grupos existentes (você precisará excluir os grupos existentes e adicioná-los novamente). Se você ativou a sobreposição, quando o banco de dados estava vazio, você deve estar OK.
fonte
Eu acrescentaria mais uma coisa à resposta de Marc: O atributo memberOf não pode conter caracteres curinga, portanto você não pode dizer algo como "memberof = CN = SPS *" e espera que encontre todos os grupos que começam com "SPS".
fonte
Você deve definir sua base de consulta para o DN do usuário em questão e, em seguida, definir seu filtro para o DN do grupo em que está se perguntando se é membro. Para ver se jdoe é um membro do grupo de escritórios, sua consulta será mais ou menos assim:
Se você quiser ver TODOS os grupos dos quais ele é membro, basta solicitar apenas o atributo 'memberof' em sua pesquisa, desta forma:
fonte