2017-10-18 26 views
0

J'essaie d'obtenir des informations de AD en utilisant node.js. J'ai essayé activedirectory et ldapauth-fork et en général le code fonctionne, mais si j'ai besoin de octetstring des données comme objectGUID, je vois une chaîne de déchets dans l'objet. I found que les données binaires sont converties en une chaîne en utf-8. Mais le problème est que les données sont endommagées lors de la conversion (beaucoup de cahrs avec le code 65533) et je ne peux pas revenir à la chaîne binaire originale.Lire objectGUID à partir du répertoire actif

Comment puis-je accéder aux données au format octetstring pour obtenir une représentation binaire correcte?

const ActiveDirectory = require('activedirectory'); 

const config = { 
    url: 'LDAP://ldap.example.com', 
    baseDN: 'OU=Users,DC=example,DC=com', 
    username: '[email protected]', 
    password: 'password' 
}; 

const ad = new ActiveDirectory(config); 

const query = { 
    filter: '(objectClass=user)', 
    attributes: ["dn", "cn", "objectGUID", "objectSid"] 
}; 

ad.findUsers(query, function (err, result) { 
    if (err) { 
    return console.error(err); 
    } 

    console.log(result.length); 
    console.log(result[0]); // objectGUID contains rubbish 
    console.log([...result[0].objectGUID].map(ch => ch.charCodeAt(0))); 
}); 

connexes:

Répondre

0

entryParser est là pour ça:

const ActiveDirectory = require('activedirectory'); 

const config = { 
    url: 'LDAP://ldap.example.com', 
    baseDN: 'OU=Users,DC=example,DC=com', 
    username: '[email protected]', 
    password: 'password', 
    entryParser(entry, raw, callback) { 
    if (raw.hasOwnProperty("objectGUID")) { entry.objectGUID = raw.objectGUID; } 
    callback(entry); 
    } 
}; 

const ad = new ActiveDirectory(config); 

const query = { 
    filter: '(objectClass=user)', 
    attributes: ["dn", "cn", "objectGUID", "objectSid"] 
}; 

ad.findUsers(query, function (err, result) { 
    if (err) { 
    return console.error(err); 
    } 

    console.log(result.length); 
    console.log(result[0]); // objectGUID contains Buffer with strange byte order 
    console.log(result[0].objectGUID 
    .toString('hex') 
    .replace(
     /^(..)(..)(..)(..)(..)(..)(..)(..)(..)(..)(..)(..)(..)(..)(..)(..)$/, 
     "{$4$3$2$1-$6$5-$8$7-$10$9-$16$15$14$13$12$11}" 
    ).toUpperCase() // Normal guid, conversion could be moved into the parser 
); 
}); 
+0

Cela peut aider: http://ldapwiki.com/wik i/ObjectGUID – jwilleke