2010-01-21 266 views
13

我想使用HTTP摘要身份驗證與存儲用戶名和加密密碼的中央數據庫。這些數據應該由不同的服務器使用,例如Apache httpd或Tomcat。客戶端將是具有瀏覽器和其他應用程序以RESTful方式通信的人類。HTTP摘要身份驗證

據我所知,我不能使用哈希密碼錶。只需要存儲HA1 = MD5(username:realm:password)需要明文密碼 - 正確?

在另一方面,它似乎是可以使用散列密碼與Apache httpd的:

​​說:

第一 行的第一列的值由查詢語句返回 應是一個包含 加密密碼的字符串。

它是否可以使用摘要式身份驗證?沒有指定散列算法的參數。 Apache httpd如何決定使用哪種算法?

RFC 2617說:

4.13存儲密碼

摘要式身份驗證要求 認證劑(通常 服務器)存儲一些數據在「密碼派生 從用戶名和密碼 文件「與給定領域的 相關聯。通常這可能是 包含由用戶名 和H(A1)組成的對,其中H(A1)是如上所述的用戶名,領域 和密碼的消化值。

這聽起來像密碼必須是明文。

在Servlet 3.0規範說:

儘管密碼未在 線送出,HTTP摘要認證 要求明文口令 當量是avaialble到 驗證容器中,使得它 可以驗證通過計算預期的摘要收到驗證者 。

什麼是「明文密碼等值」在這裏?密碼哈希?

Tomcat documentation說:

如果使用密碼消化與 DIGEST認證,用於生成摘要的明文 是 不同。在上面的示例中, {cleartext-password}必須替換爲 和 {用戶名}:{realm}:{cleartext-password}。 例如,在開發 環境中,這可能採取 testUser:localhost:8080:testPassword的形式。

以下是需要的明文密碼。

那麼,HTTP Digest身份驗證可以與已經加密的密碼一起使用還是讓密碼爲明文?

如果用戶請求來自不同子域的頁面,用戶是否必須重新輸入憑據?

瀏覽器在標籤頁關閉時還是僅在整個關閉時才刪除緩存的密碼?也許這不同於瀏覽器到瀏覽器 - 我會對哪個瀏覽器刪除它並保留它感興趣。

總體問題是,摘要身份驗證是否適合我的情況,使用已加密密碼的中央用戶數據庫。還是應該更好地使用基於會話的單點登錄服務?

回答

6

在這種情況下,如果您已經擁有散列密碼數據庫,那麼只要不使用相同函數進行散列,就不可能使用摘要式驗證。

我認爲這裏最好的解決方案是創建一個登錄頁面並使用cookie會話來控制用戶的權限。有了這個解決方案,您得到了其他問題的答案:

+0

我用MD5也湊在我的數據庫中的密碼,是否有可能使用摘要身份驗證? – vrunoa 2014-05-03 23:54:10