Passport Active Directory node.js

我已成功地将oauth1和oauth2令牌与六种护照策略(facebook,twitter,linkedin,instagram,tumblr,google,youtube)交换帐户信息,并将其集成到一个单独的auth服务器中,以保存Mongo会话并创build活动configuration文件,使用Tedious.js在令牌/会话/代码/ ID字段和SQL服务器中的许多标准化的属性字段。 这些护照工具非常好,谢谢。

我对这个项目的最后一个挑战是,把用户名和密码放到一个活动的目录仓库里,以同样的方式查找和authentication。 我一直在尝试一遍又一遍passport-ldap,passport-ldapauth(基于ldapauth-gfork,基于ldapjs),护照-windowsuth和passport-kerberos,似乎正在获取相关的凭证错误(深入代码,添加控制台.logs来试图找出我得到的语法错误)。

是否有任何其他资源和文档使用任何Passport策略访问Node.js中的LDAP / AD? DN与ou语法以及存储库相对于您正在查找的帐户用户的账户访问用户(具有专门设置为访问AD的服务账户)的位置以及filter使得很难找出任何与找出相关的错误我哪里错了。 你匹配到sAMAccountName或uid? 我始终保持“未经授权”的错误。

与其他70个护照战略不同的是,doc和示例清晰且正常,而不是广告/ ldap护照。 任何人都可以指向我一个很好的testing,文档或设置,特别是Passport.js和活动目录?

虽然这是一个老问题,但我认为,作为passport-ldapauth的维护者,我应该稍微澄清LDAPauthentication。

LDAPauthentication与以前使用的策略不同。 这些OAuth策略只能以一种方式进行configuration – 提供所需的选项,然后运行。 这部分与LDAP相同,但是这些选项的实际值因服务器而异。 你问的问题,如你匹配sAMAccountName或uid,真的取决于你和LDAP服务器。

一般的东西,比如DN是什么样的,什么是search基础,或者什么是searchfilter的语法,已经在RFC中被广泛的定义了。 如果对基础知识不熟悉,可能难以使authentication正常工作。 通常AD / LDAP服务器维护者input需要有适当的设置,例如。 什么search基地允许查找所有必需的用户,但不会导致LDAP服务器上不必要的负载。

LDAP身份validation通常分三步进行:

  1. 使用服务帐户(在passport-ldapauthbindDnbindCredentials ),绑定到LDAP服务器。
  2. 绑定后,执行configuration的search,用用户提供的用户名代替占位符。 这决定了是否从LDAP服务器find给定的用户名。
  3. 使用search结果的DN和用户提供的密码,并绑定到LDAP服务器。 这validation了密码。

如果你SAMAccountName用户使用他们的SAMAccountNamelogin,你的searchfilter可以是例如。 (sAMAccountName={{username}}) 。 如果您希望用户使用uid ,则filter可以是(uid={{username}}) 。 如果要启用两者,请使用(|(sAMAccountName={{username}})(uid={{username}})) 。 searchfilter语法在RFC 4515中指定。

我能通过passport-ldapauth对AD进行身份validation。 一个关键是知道使用服务器选项,这是不同于在线的一些LDAP示例

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

您还需要知道您是否需要ldaps和TLS。 (我没有)我花了很多时间挖掘ldapjs.org。

微软已经为此发布了一个官方库:

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

从npm直接添加到您的项目:

 npm install passport-azure-ad 

或者OAuth2stream的Auth0的passport-azure-ad-oauth2 。

我不确定您的要求有多灵活,但是我正在研究相同的主题,偶然发现了Microsoft使用AD FS作为Oauth提供程序的特定解决scheme

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

一个表面阅读表明,一个Web客户端联系AD来获得一个JWT令牌,然后这个令牌被发送到你的服务器,然后它与AD服务器validation令牌。

AD服务器需要configuration为接受您的服务器作为需要其身份服务的依赖方。