Go/Ldap 获取用户的主要组

我正在使用 go/ldap 查询我的活动目录以获取特定用户的所有组,该功能正在运行但不返回主要组,如域用户。


代码示例


package main

import (

   "encoding/json"

   "errors"

   "fmt"

   "github.com/go-ldap/ldap/v3"

   "github.com/techoner/gophp"

   "handlers"

   "log"

   "reflect"

   "strconv"

   "strings"

)


func main(){

      conn, err := connect(bindServer,BindPort)

      if err != nil {

         log.Printf("Failed to connect to AD/LDAP with error: %s", err)

         return nil, fmt.Errorf("Failed to connect to AD/LDAP with error: %s", err)

      }

      errBind := conn.Bind(bindUser, bindPWD)

      if errBind != nil {

         if isLdapDebug {

            log.Printf("Failed to bind to AD/LDAP with error: %s", errBind)

         }

         return nil, fmt.Errorf("Failed to bind to AD/LDAP with error: %s", errBind)

      }



      searchRequest := ldap.NewSearchRequest(

         DC=domain,DC=local,

         ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,

         fmt.Sprintf("(&(objectClass=user)(sAMAccountName=%s))", administrator),

         []string{"dn"},

         nil,

      )


      sr, err := conn.Search(searchRequest)


      if err != nil {

         return nil, err

      }


      if len(sr.Entries) != 1 {

         return nil, errors.New("User does not exist")

      }


      userdn := sr.Entries[0].DN

      log.Printf("USER DN IS =%s", userdn)

      searchRequest = ldap.NewSearchRequest(

         DC=domain,DC=local,

         ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,

         fmt.Sprintf("(&(objectClass=group)(member=CN=Administrator,CN=Users,DC=domain,DC=local))"),

         []string{"cn"}, // can it be something else than "cn"?

         nil,

      )


输出


[Administrators Schema Admins Enterprise Admins Domain Admins Group Policy Creator Owners gteste1 gtest2]

这些组已正确返回,但缺少主要组。


有什么方法可以返回特定用户的所有组,包括主要组?


翻过高山走不出你
浏览 362回答 2
2回答

aluckdog

主要群体不同。您必须查看primaryGroupId用户的属性,然后搜索其primaryGroupToken属性中具有该值的组。在大多数情况下,primaryGroupId将是513,它对应于 Domain Users 组。

呼唤远方

使用 lib 在 go 中查找主要组github.com/go-ldap/ldap/v3我不得不使用这个代码示例:userdn := sr.Entries[0].DNgroups := []string{}searchRequest = ldap.NewSearchRequest(   data.Record.LdapSuffix,   ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, SearchTimelimit, false,   fmt.Sprintf("(&(objectCategory=person)(objectClass=user)(primaryGroupID=513)(sAMAccountName=%s))", ldap.EscapeFilter(username)),   []string{"primaryGroupID"},    nil,)sr, err = conn.Search(searchRequest)if err != nil {   continue}if len(sr.Entries) > 0 {   primaryGroup := sr.Entries[0].GetAttributeValue("primaryGroupID")   if primaryGroup == "513" {      if searchGroup == "Domain Users" {         return true      }   }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go