- API now uses promises instead of callbacks.
- Initialisation code has been removed from the
ADAuth
constructor. If using the constructor,.initialise()
, which returns a promise, must be called afterwards. Alternatively, you can useawait ADAuth.create(options)
.
- Automated testing, both unit and integration tests.
- Project migrated to typescript.
- Package manager switched to yarn.
- Admin client removed, as it is not used in the AD authentication flow. All operations against the server are performed using the user client.
- Errors from the server are now properly passed to the client.
objectGUID
attributes are now serialized correctly. Prior, they would be serialized into unusable strings, such as{----------------}
.
- Support for loading CA certificates for AD off of the file system or a web server.
objectGUID
attributes on objects are now converted to a human-readable string format
- Unhandled case where
user.memberOf
may be a string object instead of an array, leading to an error whenmemberOf.unshift
is attempted
First working version after being forked from node-ldapauth-fork
- New, required, configuration property
domainDn
, which points to the distinguished name of the domain root (e.g.dc=corp,dc=example,dc=com
) searchFilterByDN
configuration property, which defaults to(&(objectCategory=user)(objectClass=user)(distinguishedName={{dn}}))
searchFilterByUPN
configuration property, which defaults to(&(objectCategory=user)(objectClass=user)(userPrincipalName={{upn}}))
searchFilterBySAN
configuration property, which defaults to(&(objectCategory=user)(objectClass=user)(samAccountName={{username}}))
- Users can now be authenticated both by their user principal name, or UPN, (
[email protected]
) and down-level logon name (EXAMPLE\user
) - A user's
primaryGroupID
is now used to resolve the primary group object and prepend it tomemberOf
and_groups
- Group membership is now fetched recursively and represents all the groups a user is an effective member of
searchFilter
configuration property, which has has been split intosearchFilterByDN
,searchFilterByUPN
, andsearchFilterBySAN
cutarelease.py
build step, in favour of a manual release workflow. This may be reconsidered at a later time.
- The authentication process now attempts to bind the user's credentials first. Subsequent LDAP queries use the client bound to the user's credentials
- Groups are now fetched by default instead of on-demand
searchBase
now defaults to the value ofdomainDn
and isn't required to be explicitly setgroupSearchFilter
now defaults to(&(objectCategory=group)(objectClass=group)(member={{dn}}))
- Dependency versions now use caret (
^
), except forldapjs
, which refers tomaster
, pending a future release