mvc 3 アプリで Windows 認証を使用していますが、通常はすべて正常に動作します。ただし、特定のページを約 2 分間開いたままにし、ajax 要求を行うと、(コントローラー内の) User.Identity.Name は空白を返し、authenticationtype も同様です。これにより、user.isinrole(whatever) をチェックするとエラーが発生します。通常、キャッシュをクリアすると問題は解決しますが、定期的に更新することはできません。キャッシュを数回クリアする必要がある場合があります。
私はクロムを使用していますが、IEで試したときにバグに気づきませんでした(クロムでかかる時間よりも長く待っていませんでした)ので、バグがクロムにある可能性はありますか? 編集:Firefoxでも発生します。
失敗するまでの時間が、Windows 認証で User.Identity.Name が空白になることがあるという問題に似ていることに気付きましたが 、web.config で匿名認証について何も表示されませんでした。
in user.identity.name がしばらくすると空白になり、IIS サーバーで匿名認証が有効になっていることが問題のようでした。私もそれを持っていますが、サーバーに設定したかったのです。匿名でアクセスする必要がある特定のページがあるため、認証はすべてサーバーではなく MVC によって実施されるため、IIS では匿名認証と Windows 認証が有効になっています。
system.web タグに authentication mode="Windows" があり、web.config の認証については何もありません。global.asax.cs の registerglobals 関数では、
filters.Add(new RequireWindowsAuth());
これは AuthorizeAttribute から継承するクラスであり、OnAuthorization メソッドをオーバーライドして次のようなことを行います。
if(!User.IsInRole("Admin") && AdminAttr is defined)
filterContext.Result = new HttpStatusCodeResult(403, "You are not authorized to view this page");
else if(AllowAnonymousAttribute is not found)
base.OnAuthorization(filterContext);
エラーが発生すると、サーバーから正確な 403 応答が返されます。
要求されたアクションには admin 属性があり、allowanonymous 属性は定義されていません
定義されている属性を確認する方法は次のとおりです
filterContext.ActionDescriptor.IsDefined(attr, true) || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AdminAttribute), true)