Browse Source

[PM-13007] Fix Active Directory externalId parsing (#693)

Return AD ObjectGuid attribute as buffer so it can be parsed properly
pull/681/head
Thomas Rittson 1 year ago committed by GitHub
parent
commit
37c992f16b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 10
      src/services/ldap-directory.service.ts

10
src/services/ldap-directory.service.ts

@ -18,6 +18,11 @@ import { IDirectoryService } from "./directory.service"; @@ -18,6 +18,11 @@ import { IDirectoryService } from "./directory.service";
const UserControlAccountDisabled = 2;
/**
* The attribute name for the unique identifier used by Active Directory.
*/
const ActiveDirectoryExternalId = "objectGUID";
export class LdapDirectoryService implements IDirectoryService {
private client: ldapts.Client;
private dirConfig: LdapConfiguration;
@ -240,7 +245,7 @@ export class LdapDirectoryService implements IDirectoryService { @@ -240,7 +245,7 @@ export class LdapDirectoryService implements IDirectoryService {
* otherwise it falls back to the provided referenceId.
*/
private getExternalId(searchEntry: ldapts.Entry, referenceId: string) {
const attr = this.getAttr<Buffer>(searchEntry, "objectGUID");
const attr = this.getAttr<Buffer>(searchEntry, ActiveDirectoryExternalId);
if (attr != null) {
return this.bufToGuid(attr);
} else {
@ -358,6 +363,9 @@ export class LdapDirectoryService implements IDirectoryService { @@ -358,6 +363,9 @@ export class LdapDirectoryService implements IDirectoryService {
filter: filter,
scope: "sub",
paged: this.dirConfig.pagedSearch,
// We need to expressly tell ldapts what attributes to return as Buffer objects,
// otherwise they are returned as strings
explicitBufferAttributes: [ActiveDirectoryExternalId],
};
const { searchEntries } = await this.client.search(path, options, controls);
return searchEntries.map((e) => processEntry(e)).filter((e) => e != null);

Loading…
Cancel
Save