我已经成功地将半打护照策略(facebook,twitter,linkedin,instagram,tumblr,google,youtube)与oauth1和oauth2令牌交换成一个独立的auth服务器,在Mongo中保存会话并创建活动配置文件,使用令牌/会话/代码/ id字段以及使用Tedious.js在SQL Server中使用许多标准化的属性字段。这些护照工具非常好,谢谢。
我对此项目的最后一个挑战是,用户名和密码不会进入活动目录存储库,以同样的方式查找和验证。我一直在尝试一遍又一遍地使用passport-ldap,passport-ldapauth(基于ldapauth-gfork,基于ldapjs),passport-windowsauth和passport-kerberos,似乎得到了相关的凭据错误(深入代码,添加控制台) .logs试图找出我在语法上错误的原因。)
是否有任何其他资源和文档可以使用Passport的任何策略访问Node.js中的LDAP / AD? DN与ou语法以及帐户访问用户(具有专门设置用于访问AD的服务帐户)的存储库与您正在查找的帐户用户和过滤器的位置使得很难找到与弄清楚相关的任何错误哪里出错了你匹配sAMAccountName还是uid?我一直收到“未经授权”的错误。
与其他70种护照策略不同,其中的文档和示例是明确的,只是工作,而不是ad / ldap护照。任何人都可以指向一个很好的测试,文档或设置,与Passport.js和Active Directory特别合作吗?
答案 0 :(得分:7)
虽然这是一个老问题,我认为,作为passport-ldapauth
的维护者,我应该澄清一点LDAP认证。
LDAP身份验证与您之前使用的策略不同。那些OAuth策略实际上只能以一种方式配置 - 提供所需的选项,然后它可以工作。此部分与LDAP相同,但选项的实际值因服务器而异。您提出的问题,例如您与sAMAccountName或uid匹配的问题,取决于您和LDAP服务器。
在RFC中广泛定义了一些常见的内容,例如DN的外观,搜索库是什么,搜索过滤器的语法是什么。如果一个人不熟悉基础知识,那么很难让身份验证工作。通常需要AD / LDAP服务器维护者输入才能进行适当的设置,例如。什么搜索库允许查找所有必需的用户,但不会在LDAP服务器上造成不必要的负载。
LDAP身份验证通常分三步进行:
passport-ldapauth
,bindDn
和bindCredentials
)绑定LDAP服务器。DN
以及用户提供的密码,并绑定LDAP服务器。这会验证密码。如果您希望用户使用他们的SAMAccountName
登录,您的搜索过滤器可能是例如。 (sAMAccountName={{username}})
。如果您希望用户使用uid
,则过滤器可能只是(uid={{username}})
。如果要同时启用两者,请使用(|(sAMAccountName={{username}})(uid={{username}}))
。搜索过滤器语法在RFC 4515中指定。
答案 1 :(得分:1)
我能够通过passport-ldapauth对AD进行身份验证。 一个关键是知道使用服务器操作,这与某些在线LDAP示例不同
searchBase: 'ou=Accounts,dc=mydomain,dc=com'
searchFilter: '(sAMAccountName={{username}})' // {{username}} comes from the html form.
您还需要知道是否需要ldaps和TLS。 (我没有)我花了很多时间挖掘ldapjs.org。
答案 2 :(得分:1)
微软已经为此发布了一个官方库:
https://github.com/AzureAD/passport-azure-ad
直接从npm添加到您的项目中:
npm install passport-azure-ad
或Auth0的passport-azure-ad-oauth2用于OAuth2流程。
答案 3 :(得分:0)
我不确定您对您的要求有多灵活,但我正在研究相同的主题,并偶然发现Microsoft使用AD FS作为Oauth提供商的特定解决方案
https://msdn.microsoft.com/en-us/library/dn633593.aspx
表面阅读显示,Web客户端联系AD以获取JWT令牌,然后将此令牌发送到您的服务器,然后服务器使用AD服务器对令牌进行身份验证。
AD服务器需要配置为接受您的服务器作为需要其身份服务的依赖方。
答案 4 :(得分:0)
我是一名顾问。我正在工作的公司为我提供了一些服务器的有限访问权限。我没有登录ldap服务器的权限。
我正在使用以下内容进行绑定:
(sAMAccountName = {{用户名}})
如果我无法物理登录ldap服务器,是否无法通过ldap进行身份验证?
如果他们允许我登录服务器,则ldapauth可以工作。
吉娜