Я пытаюсь настроить простой HttpModule для обработки аутентификации между моим сервером единого входа. Я включил код для модуля ниже. Модуль запускает мой SSO и правильно аутентифицируется; однако на страницах с формами события обратной передачи не происходят должным образом (например, значение isPostBack всегда ложно, даже несмотря на то, что произошел POST, события нажатия кнопки не получаются, и т. д.).
public sealed class MyAuthenticationModule : IHttpModule
{
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
Я также хотел бы отметить, что если я изменю строку:
if (!string.IsNullOrEmpty(request["ticket"]))
до:
if (!string.IsNullOrEmpty(request.QueryString["ticket"]))
проблема исчезнет.