既存の Cookie に基づいてユーザーを認証しようとしています。私は過去にカスタムIIdentity
とIPrincipal
public class CustomIdentity : IIdentity {
public string Name { get; set; }
public bool IsAuthenticated { get { return true; } }
public string AuthenticationType { get { return String.Empty; } }
}
public class CustomPrincipal : IPrincipal {
private CustomIdentity _identity;
private string[] _roles;
public IIdentity Identity {
get { return _identity; }
}
public CustomPrincipal(CustomIdentity identity, string[] roles) {
_identity = identity;
_roles = roles;
}
public bool IsInRole(string role) {
return true;
//TODO
}
}
認証を処理するための単純な HttpModule をセットアップしました。
public class Authentication : IHttpModule {
public void Init(HttpApplication application) {
application.AuthenticateRequest += new EventHandler(Application_AuthenticateRequest);
}
private void Application_AuthenticateRequest(object sender, EventArgs e) {
//TODO: authentication logic here
CustomIdentity identity = new CustomIdentity();
CustomPrincipal principal = new CustomPrincipal(identity, new string[] { });
HttpContext.Current.User = principal;
}
public void Dispose() { }
}
HttpContext.Current.Request.IsAuthenticated
web.config を介して匿名ユーザーを禁止すると、フレームワークは、認証イベントの後に true であっても、login.aspx に無限にリダイレクトされます。
これは、Windows、フォーム、およびなしの認証モードで発生します。
リクエストが適切に認証されていることをフレームワークに納得させるにはどうすればよいですか?
アップデート:
System.Web.Security.FormsAuthentication.SignOut()
私の認証モジュールがプリンシパルを設定し、サインアウトが呼び出され、モジュールが再び起動するように、別の場所で呼び出していた追加のコードがあったことが判明しました。したがって、無限のリダイレクトループ。