Passport Active Directory node.js

扶醉桌前 提交于 2019-12-09 04:15:30

问题


I have successfully assembled over a half dozen passport strategies (facebook, twitter, linkedin, instagram, tumblr, google, youtube) exchange account info with oauth1 and oauth2 token, into a single standalone auth server that saves session in Mongo and creates active profiles, with token/session/code/id fields and with many standardized atribute fields in SQL server using Tedious.js. These passport tools are excellent, thank you.

My last challenge for this project is not going as well, username and password into an active directory repository, to look up and auth in the same way. I have been trying over and over again passport-ldap, passport-ldapauth (based on ldapauth-gfork, based on ldapjs), passport-windowsauth and passport-kerberos, and seem to be getting related credential errors (deep in code, adding console.logs to try and figure out what I am getting syntactically wrong).

Are there any other resources and documentation to accessing LDAP/AD in Node.js using any strategy of Passport? The DN versus ou syntax and where the account access user (have a service account specifically set up to access the AD) for the repository versus the account user you are looking up and the filters make it very difficult to find anything error related to figure out where I am going wrong. Do you match to sAMAccountName or uid? I keep consistently getting "unauthorized" errors.

Unlike the other 70 passport strategies, where the doc and examples are clear and just work, not so much for ad/ldap passport. Can anyone point me to a good test, doc or setup that works well specifically with Passport.js and Active Directory?


回答1:


While this is an old question I thought, as the maintainer of passport-ldapauth, I should clarify LDAP authentication a little.

LDAP authentication is different from those strategies you've used before. Those OAuth strategies can really be configured only one way - provide the required options, and then it works. This part is the same with LDAP, but the actual values to the options differ from one server to the other. The questions you are asking, like do you match to sAMAccountName or uid, are really up to you and the LDAP server.

General things like what does a DN look like, what is search base, or what is the syntax of search filter have been defined extensively in RFCs. If one is not familiar with the basics it can be difficult to get the authentication to work. Often the AD/LDAP server maintainer input is needed to have proper settings, eg. what search base allows finding all required users but does not cause unnecessary load on the LDAP server.

LDAP authentication usually works in three steps:

  1. Using a service account (in passport-ldapauth, bindDn and bindCredentials), bind against the LDAP server.
  2. Once bound, perform the configured search substituting the placeholder with user provided username. This determines if the given username is found from the LDAP server.
  3. Use the DN of the search result, together with user provided password, and bind against the LDAP server. This verifies the password.

If you wish to have users login using their SAMAccountName, your search filter could be eg. (sAMAccountName={{username}}). If you wish that the users use uid, the filter could be just (uid={{username}}). If you want to enable both, use (|(sAMAccountName={{username}})(uid={{username}})). The search filter syntax is specified in RFC 4515.




回答2:


I was able to authenticate to AD via passport-ldapauth. One key was knowing to use server opts which are different than in some LDAP examples online

searchBase: 'ou=Accounts,dc=mydomain,dc=com'
searchFilter: '(sAMAccountName={{username}})'  // {{username}} comes from the html form.

You also need to know if you need ldaps and TLS or not. (I did not) I spent a good amount of time digging through ldapjs.org.




回答3:


Microsoft have released an official library for this:

https://github.com/AzureAD/passport-azure-ad

Add to your project from npm directly:

npm install passport-azure-ad

Or Auth0's passport-azure-ad-oauth2 for OAuth2 flows.




回答4:


I am not sure how flexible you are with your requirements, but I was researching the same subject and stumbled upon a specific solution from Microsoft that uses AD FS as an Oauth provider

https://msdn.microsoft.com/en-us/library/dn633593.aspx

A superficial reading shows that a web client contacts AD to get a JWT token, then this token is sent to your server, which then authenticates the token with the AD server.

The AD server needs to be configured to accept your server as a relying party that needs its identity service.




回答5:


I am a consultant. The company that I am doing work for has given me limited access to a couple servers. I do not have permission to log on to the ldap server.

I am using the following to bind:

(sAMAccountName={{username}})

If I cannot physically log on to the ldap server am I not able to authenticate via ldap?

If they give me access to log on to the server, ldapauth works.

Gina



来源:https://stackoverflow.com/questions/21439030/passport-active-directory-node-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!