2008-11-04 80 views
8

在企業環境中支持新的Web應用程序時,通常需要以特定用戶身份登錄才能診斷他們正在遇到的實際或已知問題。兩個對立的問題,在這裏適用:您如何使用哈希或加密密碼支持Web應用程序?

  1. 最佳做法是使用散列或加密密碼,不清晰的文本。有時,中間會有第三方SSO(單點登錄)。無法檢索用戶的密碼。除非用戶提供(不鼓勵),否則無法以該用戶身份登錄。

  2. 很多網絡應用程序都有個性化和複雜的授權。不同的用戶具有不同的權限(admin,manager,user)。有時用戶只能看到他們的數據 - 他們的客戶或任務。一些用戶具有隻讀訪問權限,而其他用戶可以編輯。所以,每個用戶對Web應用程序的看法都是獨一無二的。

假設在企業環境中,去用戶的辦公桌或直接連接到他們的機器是不可行的。

你如何處理這種情況?

編輯:我想重申一下,在一個大型金融機構或典型的財富500強公司中,全國乃至全球都有數十萬員工,一些IT部門的單純開發人員無法能夠直接訪問用戶的機器。其中一些是面向公衆的網絡應用程序(如網上銀行和股票交易)。而且,其中很多是Intranet應用程序都依賴於Active Directory或SSO,這意味着許多應用程序的用戶憑證都是相同的。我非常感謝你的建議;有些可能在其他類型的環境中非常有用。

回答

19

許多的這些想法不便的用戶,無論是迫使他們改變自己的密碼,或通過佔領桌面爲你調試會話。

Markc的想法是最好的:增加您的身份驗證邏輯,允許超級用戶以特定用戶身份登錄,而不是提供用戶的憑證,而是提供用戶名和超級用戶憑證。

我已經做了這樣的過去(僞上下的蟒蛇):

if is_user_authenticated(username, userpassword): 
    login the user 
else if ':' in userpassword: 
    supername, superpassword = userpassword.split(':') 
    if is_superuser_authenticated(supername, superpassword): 
     login the user 

換句話說,如果用戶名和密碼不進行身份驗證,如果密碼有一個冒號,然後它實際上是由冒號加入的管理員用戶名和管理員密碼,所以如果他們是正確的管理員用戶名和密碼,請以用戶名登錄。

這意味着您可以在不知道他們的祕密的情況下以用戶身份登錄,並且不會給他們帶來不便。

1

管理員應該能夠更改用戶的密碼。將用戶的密碼更改爲您知道的內容。然後您可以以該用戶身份登錄。

告訴用戶在完成調試後重置他/她的密碼。

+4

這是不幸的:爲什麼要對用戶造成不便,因爲你在調試? – 2008-11-04 21:23:39

+0

是的。如果可以「克隆」用戶帳戶並使用該帳戶,最終用戶可能不會感到不方便。這可能也可能不可行。此外,如果您可以使用'debuguser'帳戶查看問題,那也可能更可取 - 但它可能無法重現。 – 2008-11-04 21:36:22

1

通常通過某種可用於查看其桌面的遠程控制軟件。如果他們在Windows終端服務器上,那麼可以使用內置的管理工具。否則,我會在內部網絡或類似LogMeIn(http://www.logmein.com/)的外部服務中使用類似VNC的內容。

0
  1. 你可以有一個測試環境,其中有複製到(顯然消毒,以滿足任何安全或數據保護問題)實時數據的定期切換。如果允許,可以使用類似於有問題的用戶進行故障排除或確實是非常用戶。

  2. 使用其他答案中提到的遠程桌面客戶端,但這又可能對您不實際。如果你在域中擁有這些權限,我甚至聽說過錯誤處理,甚至在屏幕上進行截圖並將其包含在日誌中!但這聽起來有點奇怪。

  3. 你可以有一個管理工具將用戶克隆到模擬賬戶嗎?

5

對於我們的Web應用程序,我們使用一個過程,缺少更好的術語被定義爲'劫持'用戶的帳戶。

基本上,管理員可以通過簡單的按鈕點擊「劫持」用戶的帳戶。在代碼中,您只需使用唯一標識符(用戶ID在不太安全的環境中工作),然後在會話中建立必要的憑據,以便他們可以在該用戶的配置文件中工作。爲了更安全的環境,您可以爲每個用戶使用一個唯一的散列。

爲了確保此劫持方法的安全性,它總是首先驗證請求是由具有適當權限的經過身份驗證的管理員進行的。因此,有必要劫持管理員的會話或捕獲其身份驗證憑據,以便某人在應用程序中利用劫持功能。

+0

我們也使用這種方法,尤其重要,當我們的一些用戶沒有用戶名(他們使用SSO代替)。它只是使用與用戶名/密碼和SSO登錄方法相同的會話系統,但是使用被劫持帳戶的配置文件頁面中的按鈕。我們被迫讓我們的一些電話支持人員獲得劫持用戶帳戶的權限,他們發現它非常寶貴。 – eswald 2009-05-15 16:04:13

2

我有4個想法。當我鍵入他們的3人已經建議(所以我upvoted他們)

變的想法3 - 模擬:

爲了用最少的代碼改變使這是「儘可能相同的」正常登錄,可以通過提供管理員憑證和替代用戶名直接在登錄時添加模仿功能,例如以管理員身份登錄:用戶,管理員密碼。系統會將其嚴格視爲具有userpassword的用戶登錄。

想法4:你能訪問密碼存儲嗎?如果是這樣,請暫時將用戶的散列替換爲已知密碼的散列。 (密碼是經常在網上存儲在數據庫中。SQL查詢工具可以做掉期)

+0

我喜歡和#3一起去的地方,Ned對此放大了。 – DOK 2008-11-04 21:42:05

0

我們在網絡應用中使用的解決方案是讓authN/authZ將所需用戶作爲有效用戶返回。爲此,我們有一個管理功能,設置一個僞裝,然後當我們要求用戶(CURRENT_USER)當前登錄,我們處理的僞裝:

def current_user_with_effective_user 
    if masked? 
     current_user_without_effective_user.masquerade_as 
    else 
     current_user_without_effective_user 
    end 
    end 
    alias_method_chain, :current_user, :effective_user