最初のものが最初です。これはサンプルにすぎません。これが認証を行う有効な方法であるかどうかは疑問ではありません。ASP.NET MVC Authorize属性がIEとFireFoxで異なる動作をする
基本的に、使用されているブラウザに依存する奇妙な動作が発生しています。 Firefoxではすべてが期待どおりに機能しますが、IE上では、認証が失敗してもコントローラの操作がまだ実行されます。
私はSecureControllerクラスには、次の該当するコードを標準コントローラクラスから継承する設定ASP.NET MVCテストサイトがありますので、のようなAuthorizeAttributeに基づいてAuthorizeByTokenAttribute属性もあります
[AuthorizeByToken]
public class SecureController : Contrller
protected override void OnAuthorization(AuthorizationContext filterContext)
{
// Check for presence of encoded session string
if (filterContext == null) throw new ArgumentNullException("filterContext null");
if (filterContext.HttpContext == null) throw new ArgumentNullException("httpContext null");
if (filterContext.HttpContext.Request["TestToken"] == null) return;
// Complete authorization
FormsAuthentication.SetAuthCookie(csmSession.CSMUser.userName, true);
base.OnAuthorization(filterContext);
}
を:
public class AuthorizeByTokenAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("/");
filterContext.ActionDescriptor = null;
base.HandleUnauthorizedRequest(filterContext);
}
}
たとえば、http://testsite/TestSecureController/Indexにアクセスすると、Firefoxでは期待通りに動作します。これはコードの承認に入り、失敗してルートにリダイレクトされます。 IEでは、それはコードを承認し、まだ失敗し、次のステップはTestSecureControllerのIndex()アクションが実行されることです。
誰かがこのようなものがブラウザに依存する理由について、いくつかの洞察を提供できますか?
質問のいくつか:1.このコントローラのルートのIndex()アクションメソッドではありませんか? 2.この属性で飾られたSecureContollerではなく、Webサイト全体のルートにリダイレクトしようとしていますか? – Aaronontheweb
RedirectResult( "/")がWebサイトではなくコントローラのルートにリダイレクトされていることをお勧めしますか?私はそれがそのように動作するとは思っていなかったり、ルーティングがどのように機能するかを壊すでしょう。間違っても私を訂正してください。いずれにせよ、これはブラウザの選択によって影響を受けない、完全にサーバーに含まれた動作であることは間違いありませんか? – nathanchere
私はフードを開いて質問に答える前に、あなたの目標が何であるかを理解しようとしています。あなたの問題は、各ブラウザが相対的なUrisを処理する方法と、各ブラウザでCookieの動作がどのように機能するかという2つの領域のいずれかにあります。私は今すぐ、項目#1を削除または確認するための実験を設定しています。 – Aaronontheweb