2010-03-25 75 views
3

所以有一點背景,我正在研究一個現有的Web應用程序,它有一組用戶,他們可以通過傳統的登錄屏幕用用戶名和密碼登錄等。遠程Web應用程序在我當前的Web應用程序中驗證用戶的最佳方式?

最近我們已成功爲客戶(擁有自己的Intranet站點)評分,他們希望能夠讓他們的用戶登錄到他們的Intranet站點,然後讓他們的用戶點擊Intranet上的鏈接,該鏈接重定向到我們的應用程序和日誌他們自動進入它。

我對如何實現這一迄今爲止兩點建議:

  1. 創建這需要2個參數(這是「用戶名」和「密碼」),並有內部網站通過這些參數的URL給我們(我們的連接是通過SSL/TLS進行的,因此全部加密)。這樣可以正常工作,但似乎有點「黑客」,也意味着兩個系統上的登錄名和密碼必須相同(並且必須編寫某種可以更新用戶密碼的Web服務 - 這也是似乎有點不安全)
  2. 向Intranet提供一個令牌,所以當客戶點擊Intranet上的一個鏈接時,它將令牌發送給我們,以及用戶名(並且沒有密碼),這意味着它們被認證。再說一次,這聽起來有點不好意思,因爲這與提供給每個人使用相同密碼登錄的基本相同?

所以總結一下,下面的事情後,我:

  1. 一種方式,誰已經驗證Intranet上的用戶登錄到我們的系統中沒有太多的插科打諢,而無需使用外部系統進行身份驗證,即LDAP/Kerberos的
  2. 東西是沒有太具體到這個客戶端,並且可以很容易被其他企業內部網來實現登錄

回答

0

我討厭回答我自己的問題,但我更討厭沒有答案的問題。最後,我們使用SalesForce委派的身份驗證SSO實現的非常類似的實現。

http://wiki.developerforce.com/page/How_to_Implement_Single_Sign-On_with_Force.com

本質上的解決方案具有受信任的站點,被稱爲委託認證授權,誰擁有誰登錄到公司內網用戶的列表。

當用戶登錄到公司內部網,並且他們點擊一個指向我們應用程序的鏈接時,公司內部網會將用戶名和生成的令牌(在設定的時間後過期)傳遞給我們的應用程序。

然後,我們的應用程序將檢查用戶名是否在我們的網站上,如果有,請將用戶名/令牌(連同源IP和其他一些參數)發送到委託認證機構。如果所有這些項目在委託認證權限上匹配,則它返回true並且用戶可以登錄。如果它返回false,則拒絕用戶訪問。

我們發現這個系統工作得很好,甚至還實現了SSL,客戶端證書,VPN隧道等一些額外的安全功能,甚至限制了可以訪問該站點的IP地址和委派的認證授權。

我知道這是不好的形式來回答你自己的問題,但我希望這可以幫助別人誰可能會有同樣的問題...

1
雙方你建議OPTIO的

即使您使用SSL,ns也是不安全的。永遠不要在URL上傳遞憑證,並使用POST將它們放入HTTP請求中。

有一個標準叫SAML,這可以用來解決你的問題。挑戰在於選擇要實施的版本。我會選擇SAML 2.0

Google Apps implements是SAML 2.0的一種風格,並允許您使用Intranet憑證進行身份驗證。在您的應用程序中,您將成爲服務提供者,您的客戶將成爲身份提供者。只要你正確地實施標準,你應該能夠支持任何新的客戶端(身份提供者)。以下是您可能需要查看的SAML實施的list。如果您需要客戶端傳遞除了身份驗證信息之外的信息,則SAML可以通過元數據來實現這一點。

您仍然需要實施SSL來加密網絡流量。

相關問題