Maison > Article > développement back-end > Comment connecter Ldap à Golang
La colonne tutorielle suivante de golang vous présentera comment connecter Ldap dans Golang. J'espère qu'elle sera utile aux amis dans le besoin !
Aujourd'hui, j'écris ici sur la façon dont Golang se connecte à ldap
Il existe des packages ldap dans golang que j'utilise
go get -u "gopkg.in/ldap.v2"
Mon environnement ldap :
rootdn : uid=admin,dc=wjq,dc=com mot de passe : openldapdn: dc=wjq,dc=com dc: wjq objectClass: top objectClass: domain dn: ou=Group,dc=wjq,dc=com ou: Group objectClass: top objectClass: organizationalUnit dn: ou=People,dc=wjq,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: uid=admin,dc=wjq,dc=com uid: admin objectClass: top objectClass: accountUn groupe et un utilisateur :
#组信息 dn: cn=test,ou=Group,dc=wjq,dc=com gidNumber: 1003 cn: test objectClass: posixGroup #用户信息 dn: uid=test,ou=People,dc=wjq,dc=com uidNumber: 1009 gidNumber: 1003 gecos: test homeDirectory: /home/test uid: test shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash shadowInactive: -1 shadowExpire: -1 shadowFlag: -1 objectClass: posixAccount objectClass: shadowAccount objectClass: account cn: test userPassword:: e1NTSEF9d053TWhYRTR4STJUUmpJWm5MTkF4VFlBTFhJdStaZ0Q= shadowLastChange: 17858les étapes de traitement de golang sont les suivantes : 1. ldap .Dail#Cette étape est la connexion sous-jacente Première étape : Dail Dail a deux paramètres réseau, adresse, retour (*Conn, erreur)
réseau : fait référence au réseau Protocole tcp, udp adresse : C'est l'adresse à connecter en couche inférieure et doit avoir un numéro de port
con, err := ldap.Dial("tcp", "127.0.0.1:389")Deuxième étape : Authentification
Bind(rootdn, password) (erreur)
berror := conn.Bind("uid=admin,dc=wjq,dc=com", "openldap")Étape 3 : Opération ; L'opération est très unique, je pense que ce sont peut-être les caractéristiques du langage Golang, telles que la requête
, ldap fournit une structure de requête - ldap.NewSearchRequest, tant que nous remplissons les données puis appelons ldap.Search pour ajouter, ldap Fournissez une structure ajoutée -- ldap.NewAddRequest, remplissez les données, puis appelez ldap.Add
pour supprimer , ldap fournit une structure de suppression -- ldap.NewDelRequest, puis appelle ldap.Del Modification du mot de passe utilisateur, ldap fournit une structure pour modifier les mots de passe utilisateur -- ldap.NewPasswordModifyRequest, puis appelle ldap.PasswordModify C'est très unique, jetons un coup d'oeil : Requête du groupe d'utilisateurs NewSearchRequest :func NewSearchRequest( BaseDN string, Scope, DerefAliases, SizeLimit, TimeLimit int, TypesOnly bool, Filter string, Attributes []string, Controls []Control, ) *SearchRequestBaseDN : selon mon environnement ldap, cela devrait être ou=Group,dc=wjq, dc=comscope : ce que je comprends, c'est la portée de la requête, ldap est une arborescence de répertoires, I Paramètres généraux ldap.ScopeWholeSubtree DerefAiases : indique si les alias (cn, ou) sont supprimés dans la recherche, paramètres : ldap.NeverDerefAliasesSizeLimit : paramètres de taille, généralement définis sur 0TimeLimit : paramètre de temps, généralement défini sur 0TypesOnly : défini sur false ( il semble renvoyer un peu plus de valeur)Contrôles : C'est un contrôle que je n'ai pas beaucoup utilisé, généralement réglé sur zéroJe ne les comprends pas bien, vous pouvez vous référer à : https://tools.ietf.org/html/rfc4511Les deux principaux paramètres de la requête sont Filter et AttributesFilter C'est la valeur d'attribut renvoyée par la condition de filtre Attributs Créer la structure SearchRequest :
srsql := ldap.NewSearchRequest("ou=Group,dc=wjq,dc=com", ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, "(&(objectClass=posixGroup))", []string{"dn", "cn", "uid"}, nil)Filtre : (&objectClass=posixGroup )) Rechercher tous les groupes et renvoyer le dn , cn, uid de chaque groupe
Filtrer le groupe d'utilisateurs de test : (&(objectClass=posixGroup)(cn=test)) Filtrer l'utilisateur cn= test, ou uid=test (bien sûr baseDn est celui de l'utilisateur : "(|(&(objectClass=posixAccount)(cn=test))(&(objectClass=posixAccount)(uid=test)))"
Exécuter Recherchez et obtenez les résultats (dans cur.Entries) :cur, er := l.Search(srsql) if er != nil { log.Fatalln(er) } if (len(cur.Entries) > 0){ for _, item := range cur.Entries { cn := item.GetAttributeValue("cn") if cn == "" { cn = item.GetAttributeValue("uid") } fmt.Println(cn) } }Ce qui précède sont les étapes de la recherche.
Voyons comment ajouter un utilisateur : NewAddRequestAjouter
Utilisateur : wujq Mot de passe : 123456 Répertoire personnel : / home /wujq Groupe auquel /wujq appartient : test (id=1003)1 Confirmez d'abord le nom d'utilisateur que je dois ajouter : uid=wujq,ou=People,dc=. wjq,dc=com 2. gidNumber est 10033 Parce que la valeur uidNumber est obligatoire, supposons que je la définisse sur 1010 (non utilisée par le système)Le code d'exécution est le suivant :
sql := ldap.NewAddRequest("uid=wujq,ou=People,dc=wjq,dc=com") sql.Attribute("uidNumber", []string{"1010"}) sql.Attribute("gidNumber", []string{"1003"}) sql.Attribute("userPassword", []string{"123456"}) sql.Attribute("homeDirectory", []string{"/home/wujq"}) sql.Attribute("cn", []string{"wujq"}) sql.Attribute("uid", []string{"wujq"}) sql.Attribute("objectClass", []string{"shadowAccount", "posixAccount", "account"}) er := ldapcon.Add(sql)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!