2009-07-24 17 views
1

我向系統添加了可選的OpenID身份驗證。一切工作順利與DotNETOpenID。然而,我得到一個問題時:DotNetOpenId - 通過編程和網絡登錄獲取重播攻擊失敗

  1. 用戶登錄到使用標準登錄(FormsAutentication)
  2. 用戶同夥一些OpenID支持帳戶(我們使用編程的OpenID登錄在這裏得到所宣稱的身份)的Web應用程序
  3. 用戶註銷FormsAuthentication並使用OpenID(使用Login控制)重新登錄。

在最後一步,我們得到一個重放攻擊錯誤。我懷疑OpenID在應用程序存儲中保留了一些信息(用於請求),這些信息用於獲取先前的請求,而不是啓動一個新的請求。

任何人都可以幫助解決這裏的問題嗎?

如果問題出在我對它的理解上,如何在使用程序化登錄成功將OpenID綁定到帳戶(鑑於我手邊有成功的請求)後清理此特定狀態信息?

+1

首先,在您的repro步驟中,您提到用戶使用您的程序化登錄進行登錄,然後使用Login控制登錄。那麼這兩個不同的登錄頁面,一個是編程式的,一個是使用`OpenIdLogin`控件?或者它是相同的程序化登錄頁面?我不確定這是否意義重大,但我只想在你的場景中看清楚。 – 2009-07-24 13:54:14

回答

0

好的,實際的問題似乎在第一次OpenID分配和實際認證之間添加Session.Abandon()(並清除auth邏輯)後消失。

2

您正在測試哪個提供商?說實話,這聽起來像是最有可能犯罪的一方,因爲它構成了openid.response_nonce值。另一個可能的地方是你(偶然)在第一次登錄和第二次登錄之間保持URL中的所有openid。* querystring參數?例如,在用戶輸入OpenID之前的第二個登錄頁面中,他們的openid。*參數是否在頁面的URL中?如果是這樣,那很可能是問題,它可以通過您的編程頁面修復,導致乾淨的重定向在嘗試登錄後襬脫它們。

相關問題