2011-08-25 13 views
7

私は、単純なASP.NET MVC 3サンプルで、デフォルトのLogOnフォームを変更して簡単なテストを行いました。 this articleによれば、隠しフィールド__RequestVerificationTokenとクッキー__RequestVerificationToken_Lw__の両方は、Html.AntiForgeryToken()によって生成された同じ値を含む必要があります。しかし、私はフィドルでMVC 3のソースコードを見て、方法では、GetAntiForgeryTokenAndSetCookieを見たときに正確に同じではないクッキーを生成するための塩の値を使用していないようだ。 MVC 3に変更はありましたか?AntiForgeryTokenの隠しフィールドが、自分のマシン上のCookieと同じではないのはなぜですか?

通常またはAjax POSTリクエストの両方で正常にログオンできることを忘れてしまいました。ここで

はフィドルからの生のログです:あなたは、彼らが同じであるべきだと思います

POST http://localhost:51713/Account/LogOn HTTP/1.1 
Referer: http://localhost:51713/Account/LogOn 
Content-Length: 256 
Origin: http://localhost:51713 
X-Requested-With: XMLHttpRequest 
Content-Type: application/x-www-form-urlencoded 
Cookie: __RequestVerificationToken_Lw__=OIRtVqUvNt/LfDGeoVy3W1VhdKN7MwdbUZmRNScz4NqS4uV0I0vQH2MHg77SsVhcinK5SJi9mVcdBUWk2VMiPTk8EMUN2Zq0X4ucK8XQ3/zr6NoiIvVF73Bq8ahbFaY/IrNrWY7mmzvO9j/XVLNN2lNqgCd6I3UGZAw3/nlOmpA= 

__RequestVerificationToken=zeDS%2F8MZE%2BLf%2FrRhevwN51J7bOE3GxlGNLQc8HogwFctF7glU1JboHePTTHa5YFe9%2FD2sY7w167q53gqvcwYZG1iZeecdnO4fdg6URdR4RUR%2BjIgk1apkXoxQ2xg48REfv4N5D4SHKU4MAf30Diy0MVyyF9N2Dl7uUGT6LbKHZU%3D&UserName=Tien&Password=tien&RememberMe=false 
+1

傍注として - AntiForgeryトークンは、アプリケーションの非公開部分(ユーザーが既に認証されている場所)で使用するように設計されています。公的なログインフォームでそれらを使用することは、かなり無意味です。 –

+0

LogOnフォームはテスト目的で使用されたばかりです。 –

答えて

2

何? :)もちろん、彼らは何らかの形で私に匹敵していなければなりませんが、それは彼らが連載された形で同じに見えなければならないという意味ではありません。クッキー(私は「塩」とトークンのみと考える)とHTMLマークアップ(塩、トークン、作成時間、ユーザー名)にシリアル化されたさまざまなデータがあります。

あなたが詳細に興味がある場合は、ILSpyを取り、System.Web.Mvc.ValidateAntiForgeryTokenAttribute

+0

ありがとう、記載された記事は同じであると言った:)、そしてその名前も同じです。 –

+0

ILSpyは必要ありませんが、ASP.NET Mvcはオープンソースです。 http://aspnetwebstack.codeplex.com/SourceControl/latest – haim770

1

System.Web.Mvc.AntiForgeryDataSerializerSystem.Web.Mvc.AntiForgeryDataOnAuthorization方法を探し隠しフィールド反偽造トークンはなることはありませんので、あなたがあなたの質問に参照されている記事は、単に間違っています反偽造クッキー値と同じです。

私の答えの付加価値は、link to interesting articleで、ASP.NET偽造トークンの内部構造を記述しています。クッキーやフォームのトークンを一致させるために

BitConverter.ToString(System.Web.Helpers.AntiXsrf.MachineKey45CryptoSystem.Instance.Unprotect(tokenValue)) 

...以降:それは、とりわけ、デコードおよびクッキー/フォーム・トークンを解読するために明確な手順を提供します。

関連する問題