2014-02-15 102 views
4

我的過程是非常簡單的;用戶使用登錄表單登錄。登錄表單發佈帖子,並定義一個@Html.AntiForgeryToken。在服務器上,操作方法定義[ValidateAntiForgeryToken]以驗證提供的令牌。這是默認的微軟賬戶登錄設置邏輯,並沒有太多改變。AntiForgeryToken阻止用戶登錄在某些移動設備

以下是一些用戶所得到的錯誤:

防僞造令牌是爲用戶「」但目前的用戶 「用戶名」

,並防止記錄用戶進入系統。這隻發生在某些移動設備上的某些用戶,因此它非常孤立。此外,這只是一個簡單的登錄;在我看過關於這個問題的其他帖子之後,它不是任何後期操作,所以這是一個非常奇怪的問題需要解決。

任何想法,爲什麼某些移動設備會拒絕呢?

回答

0

這主要是因爲生成令牌的機制將讀取當前用戶名和生成AntiForgeryToken值通常是在登錄完成之前,一個空白的用戶名時,把它作爲輸入。

當你的用戶登錄成功,現在用戶名值有一個「值」,所以舊的令牌不會通過由asp.net運行時執行的安全檢查,所以你提到的錯誤將顯示。

一個方法是添加下面一行到你的Application_Start您的全局文件裏面抑制你的應用程序忽略,包括用戶名作爲生成的令牌的一部分:

AntiForgeryConfig.SuppressIdentityHeuristicChecks = true.

+0

你預見到有任何安全隱患該決定,作爲用戶名是什麼使得加密密鑰獨一無二...似乎很奇怪,它確實對一些用戶有效,但對其他用戶不起作用。 –

+0

我認爲這裏唯一可以實現的安全關注與如果您將用戶名視爲輸入的一部分完全相同。任何攻擊者都需要訪問兩件事:你的'AntiForgeryToken'值以及你的Cookie。沒有這個正確的組合,你應該是安全的。 –

相關問題