2014-01-29 66 views
7

我已經成功地組裝了半打護照策略(Facebook,微博,LinkedIn,Instagram的,tumblr,谷歌,YouTube)的與您好!OAuth1和的oauth2令牌交換帳戶信息,到一個單一的獨立的身份驗證服務器使用Tedious.js在Mongo中保存會話並創建活動配置文件,其中包含token/session/code/id字段以及SQL Server中的許多標準化屬性字段。這些護照工具非常好,謝謝。護照的Active Directory的node.js

我對這個項目的最後一個挑戰是不會爲好,用戶名和密碼的活動目錄庫,查找和AUTH以同樣的方式。我一直在反覆嘗試passport-ldap,passport-ldapauth(基於ldapauth-gfork,基於ldapjs),passport-windowsauth和passport-kerberos,並且似乎正在獲取相關的憑證錯誤(深入代碼,添加控制檯.logs來試圖弄清楚我的語法錯誤)。

是否還有其他的資源和文檔使用護照的任何戰略的Node.js訪問LDAP/AD? DN與ou語法以及存儲庫相對於您正在查找的帳戶用戶的賬戶訪問用戶(具有專門設置爲訪問AD的服務賬戶)的位置以及過濾器使得很難找出任何與找出相關的錯誤我錯了。你是否符合sAMAccountName或uid?我始終保持「未經授權」的錯誤。

不同於其他70護照策略,在文檔和例子是明確的,只是工作,沒有那麼多的廣告/ LDAP護照。任何人都可以指向我一個很好的測試,文檔或設置,特別適用於Passport.js和Active Directory嗎?

+0

簡要查看passport-ldap模塊,確保爲Active Directory設置authMode爲0,爲標準LDAP設置爲1。如果你不這樣做,用戶名將與baseDN混淆,但這是不對的。此外,ldap服務器通常會返回描述實際問題的錯誤代碼 - 如果您有問題,請使用它更新您的問題。最後,如果您發佈了其中一個模塊的完整配置,包括用戶名(您可以將密碼設置爲:)),那將會很棒。 –

+0

還有https://github.com/gheeres/node-activedirectory –

回答

1

我能夠通過passport-ldapauth向AD進行身份驗證。 一個關鍵是瞭解需要使用服務器OPTS這比一些LDAP的例子是不同的在線

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

你還需要知道,如果你需要LDAPS和TLS與否。 (我沒有)我花了很多時間在ldapjs.org上進行挖掘。

+0

我建議searchBase作爲域樹的根,即* dc = mydomain,dc = com * - 保存在很多公司,用戶帳戶分散在不同的OU基於組織結構,而不是對象類型。如果這不是默認的,你也應該確保你使用ldap v3。 –

0

我不知道你是如何靈活與您的要求,但我是研究同一主題和偶然從微軟使用AD FS作爲一個OAuth提供

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

膚淺的一個具體的解決方案閱讀顯示Web客戶端聯繫AD以獲取JWT令牌,然後將此令牌發送到您的服務器,服務器隨後使用AD服務器驗證令牌。

廣告服務器需要進行配置,接受你的服務器作爲依賴方需要它的身份服務。

7

儘管這是一個老問題,我想,作爲passport-ldapauth維護者,我要澄清LDAP身份驗證的一點。

LDAP身份驗證與以前使用的策略不同。這些OAuth策略只能以一種方式進行配置 - 提供所需的選項,然後運行。這部分與LDAP相同,但是這些選項的實際值因服務器而異。你問的問題,如你匹配sAMAccountName或uid,真的取決於你和LDAP服務器。

一般的事情,比如DN是什麼樣的,什麼是搜索基礎,什麼是搜索過濾器的語法,已經在RFC中被廣泛定義。如果對基礎知識不熟悉,可能很難使認證正常工作。通常AD/LDAP服務器維護者輸入需要進行適當的設置,例如。什麼搜索基地允許查找所有必需的用戶,但不會導致在LDAP服務器上不必要的負載。

LDAP身份驗證通常工作在三個步驟:

  1. 使用服務帳戶(以passport-ldapauthbindDnbindCredentials),對LDAP服務器綁定。
  2. 綁定後,執行配置的搜索,用用戶提供的用戶名替換佔位符。這決定了是否從LDAP服務器找到給定的用戶名。
  3. 使用搜索結果的DN,連同用戶提供的密碼,並綁定到LDAP服務器。這驗證了密碼。

如果您希望用戶使用其登錄名SAMAccountName,您的搜索過濾器可能是例如。 (sAMAccountName={{username}})。如果您希望用戶使用uid,則該過濾器可能只是(uid={{username}})。如果要啓用兩者,請使用(|(sAMAccountName={{username}})(uid={{username}}))。搜索過濾器語法在RFC 4515中指定。