簡體   English   中英

遠程Web應用程序對我當前Web應用程序中的用戶進行身份驗證的最佳方法?

[英]Best way for a remote web app to authenticate users in my current web app?

因此,有一點背景知識,我正在使用一個具有一組用戶的現有Web應用程序,這些用戶能夠通過傳統的登錄屏幕使用用戶名和密碼等進行登錄。

最近,我們設法為客戶(擁有自己的Intranet站點)評分,他們希望能夠讓其用戶登錄其Intranet站點,然后讓其用戶單擊Intranet上的鏈接以重定向到我們的應用程序並自動將其登錄。

到目前為止,我對如何實現這一點有兩個建議:

  1. 創建一個包含2個參數(“用戶名”和“密碼”)的URL,並使Intranet站點將這些參數傳遞給我們(我們的連接是通過SSL / TLS進行的,因此均已加密)。 這可以正常工作,但似乎有些“ hacky”,並且還意味着登錄名和密碼在兩個系統上必須相同(並且必須編寫某種可以更新用戶密碼的Web服務-這也似乎有點不安全)
  2. 提供一個到Intranet的令牌,因此當客戶單擊Intranet上的鏈接時,它將令牌與用戶名(無密碼)一起發送給我們,這意味着它們已通過身份驗證。 再說一次,這聽起來有點hacker,因為這與向每個人提供相同的密碼登錄基本不一樣嗎?

總而言之,我追求以下幾點:

  1. 一種使已經在Intranet上進行身份驗證的用戶登錄到我們的系統中的方法,而不會造成太多混亂,並且無需使用外部系統進行身份驗證,即LDAP / Kerberos
  2. 此客戶端不太特定,可以由其他Intranet輕松實現以登錄

即使使用SSL,建議的兩個選項也不安全。 切勿在URL上傳遞憑據,而應使用POST將其放入HTTP請求中。

有一個稱為SAML的標准,可以用來解決您的問題。 挑戰在於選擇要實施的版本。 我會選擇SAML 2.0

Google Apps 實施了一種SAML 2.0,並允許您使用Intranet憑據進行身份驗證。 對於您的應用程序,您將是服務提供商,而客戶將是身份提供商。 只要正確實施該標准,您就應該能夠支持任何新客戶端(身份提供者)。 這是您可能需要查看的SAML實現列表 如果您需要客戶端除身份驗證信息之外還傳遞其他信息,則SAML可以通過元數據來簡化此過程。

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

我討厭回答我自己的問題,但是我更討厭一個沒有答案的問題。 最后,我們使用了非常相似的SalesForce委托身份驗證SSO實現的實現。

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

本質上,該解決方案具有一個受信任的站點,稱為委派身份驗證授權機構,該站點具有登錄到公司內部網的用戶列表。

當用戶登錄公司Intranet並單擊指向我們應用程序的鏈接時,公司Intranet將把用戶名和生成的令牌(在設定的時間后過期)傳遞給我們的應用程序。

然后,我們的應用程序將檢查用戶名是否在我們的網站上,如果是,則將用戶名/令牌(以及源IP和其他一些參數)發送給委派的身份驗證機構。 如果所有這些項目在委派的身份驗證授權上均匹配,則返回true,並且用戶可以登錄。如果返回false,則拒絕用戶訪問。

我們發現該系統運行良好,甚至實現了一些額外的安全功能,例如SSL,客戶端證書,VPN隧道,甚至限制了可以訪問站點和委托的身份驗證機構的IP地址。

我知道回答您自己的問題是一種不好的形式,但我希望這對其他可能遇到相同問題的人有所幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM