0

私のアプリケーションの認証コード内で、FormsAuthentication最も複雑な部分を処理するために使用して、アプリケーションを実行している特定のマシンの環境問題の原因を BinaryFormatter に絞り込みました。

On some machines the auth process completes properly and my users are logged in. On others, however, the BinaryFormatter produces separate results from the same inputs (virtually identical, unless I'm missing something), thus breaking the auth process and users can never log in.

In the correct environment, it produces a serialized string with a length of about 373. In the bad environment, the serialized string produced is 5,024. Herein lies the problem.

Here's how the code is being run:

var formatter = new BinaryFormatter();
var buffer = new MemoryStream();

formatter.Serialize(buffer, HttpContext.Current.User);

This in turn mucks up the rest of the authentication process, because it essentially creates a cookie with about 40,000+ bytes of data, which never creates a cookie (needs to be 4,096 bytes or less to be accepted by the browser).

My question, and it's not easily testable (tell me about it) - what could be different between the two machines to cause serialization differences? Both are being developed on Windows 7 in Visual Studio and running on the built-in Cassini server, but are there other common gotchas that would make Serialize return such vastly different results?

4

1 に答える 1

0

私の同僚がこれに遭遇しましたが、問題は実際にシリアライザーにあるようです:

ASP.NET ロールベースの認証を使用してみましたが、ロールの Cookie をクライアント ブラウザーに生成する必要があります。.NET Framework フォーム v4.0 を v4.5 にアップグレードしたとき。Cookie は生成されなくなりました。テストとチェックの後、RolePrincipal.ToEncryptedTicket() によって返される文字列テキストが以前よりも 10 倍長く、少なくとも 1 つが Cookie の最大長 4,096 よりも大きいことが原因であることがわかりました。そのため、RoleManagerModule は asp.net ロールの Cookie を生成できません。.NET Framework 4.5 をアンインストールし、v4.0 を再インストールしたところ、正常に戻りました。ロールの Cookie がクライアント ブラウザに再び表示される

[ソース: http://connect.microsoft.com/VisualStudio/feedback/details/759157/net-4-5-binaryformatter-serialization-generates-too-long-string ]

また、そのページには Microsoft からの回答があり、調査したこと (このページはバグ レポートです) があり、これは仕様によるものであるため、解決済みとしてマークされています。

.NET 4.5 と 4.0 を削除してから 4.0 を再インストールするとうまくいきました。当分の間、アプリケーションは正常に動作します。この問題を回避するために認証部分を再加工することを検討して、移動できるようにします。将来的には 4.5 フレームワークに移行します。

于 2012-09-12T12:19:39.097 に答える