2014-11-04 76 views
1

我正在爲Bootstrap和AngularJS編寫C#MVC後端代碼的前端應用程序。爲什麼我無法從AngularJS或甚至純JavaScript獲得__RequestVerificationToken的值?

使用Chrome的開發者控制檯(和任何其他瀏覽器,包括IE),我可以看到一個cookie稱爲__RequestVerificationToken,如下面示出了圖像:

enter image description here

我明白這是用於防止技術CSRF攻擊。無論如何,因爲這個cookie在那裏,我試圖使用AngluarJS模塊$cookies獲得它的值,但它總是返回undefined,並且打印document.cookie不顯示它。下面是使用的代碼:

... 
this.initApp = function() { 
    console.log('Value of __RequestVerificationToken: "' + $cookies.__RequestVerificationToken + '"'); // Angular way 
    console.log('Cookie: "' + document.cookie + '"'); // Pure JavaScript 
}; 
... 

所以我的問題是,爲什麼我不能得到它的價值如果cookie是存在的,在每一個響應被髮送到客戶端,以及如何獲得它的價值?

回答

1

您有[ValidateAntiForgeryToken]屬性,它在您的操作之前將一個唯一值寫入僅限HTTP的cookie。您還應該在表單中添加@Html.AntiForgeryToken(),並將相同的值作爲隱藏字段寫入表單。

var token = $('input[name="__RequestVerificationToken"]').val(); 
+0

我試圖避免在我看來剃刀語法,還有沒有其他的辦法嗎?當然,如果這是我爲之奮鬥的唯一解決方案。 – 2014-11-04 20:39:07

+0

你可以看看這個[SO問題](http://stackoverflow.com/questions/14925446/how-to-get-antiforgerytoken-value-without-hidden-input) – 2014-11-04 20:44:51

0

正常情況下__RequestVerificationToken是HttpOnly,所以它不能被客戶端腳本訪問。 你的圖片有什麼奇怪的是HTTP列中沒有標誌。 它應該是類似這樣的畫面 - 看到HTTP檢查強調:

enter image description here

相關問題