开发者

HttpModule is breaking PostBack events

开发者 https://www.devze.com 2023-03-30 16:14 出处:网络
I\'m trying to setup a simple HttpModule to handle authentication between my single sign on server. I\'ve included code for the module below. The module is hitting my SSO and properly authenticating;

I'm trying to setup a simple HttpModule to handle authentication between my single sign on server. I've included code for the module below. The module is hitting my SSO and properly authenticating; however, on pages with forms the postback events are not occurring properly (e.g. isPostBack value is always false even though a POST occurred, button click events don't get hit, etc.).

public sealed class MyAuthenticationModule : IHttpModule开发者_StackOverflow
{      
    public void Init(HttpApplication context)
    {
        context.AuthenticateRequest += OnAuthenticateRequest;
    }
    public void Dispose()
    {
    }

    public static void OnAuthenticateRequest(object sender, EventArgs e)
    {
        FormsAuthentication.Initialize();

        HttpContext context = HttpContext.Current;
        HttpRequest request = context.Request;
        HttpResponse response = context.Response;

        // Validate the ticket coming back from the authentication server
        if (!string.IsNullOrEmpty(request["ticket"]))
        {
            // I can include code for this if you want, but it appears to be
            // working correct as whenever I get a ticket from my SSO it is processed
            // correctly. I only get a ticket after coming from the SSO server and
            // then it is removed from the URL so this only gets hit once.
            MyAuthentication.ProcessTicketValidation();
        }

        if (!request.IsAuthenticated)
        {
            // redirect to the login server
            response.Redirect("https://sso.example.com/login.aspx" + "?" + "service=" + 
                                HttpUtility.UrlEncode(context.Request.Url.AbsoluteUri), false);
        }
    }
}

EDIT

I would also like to note that if I change the line:

if (!string.IsNullOrEmpty(request["ticket"]))

to:

if (!string.IsNullOrEmpty(request.QueryString["ticket"]))

the problem goes away.


Is it possible that your postbacks have a duplicate form data variable, "ticket"? That would seem to explain the behavior to me.

Aside from that, this line is suspicous:

FormsAuthentication.Initialize();

The FormsAuthentication class uses the "Provider" pattern, which means it's a singleton. You should not re-initialize. From the msdn documentation:

The Initialize method is called when the FormsAuthenticationModule creates an instance of the FormsAuthentication class. This method is not intended to be called from your code.

0

精彩评论

暂无评论...
验证码 换一张
取 消