У меня есть сборка, которая действует как пользовательский HttpHandler (реализует IHttpHandler и зарегистрирован в блоке в web.config), который я хотел бы предоставить для обеспечения функциональности поставщика openid. Рассматривая примеры DotNetOpenAuth, я смоделировал свой обработчик после OpenIdOfflineProvider - поскольку этот образец (по крайней мере, в его корнях) представляет собой простой HttpListener со всеми функциями провайдера в коде. Я нахожусь в точке, где я могу предоставить свой URL проверяющей стороне (пример веб-формы rp) и увидеть запрос IAuthenticationRequest. Если я установлю IAuthenticationRequest.IsAuthenticated = true, тогда аутентификация пройдет успешно.
Однако - на данный момент я бы хотел перенаправить пользователя на пользовательскую страницу для входа в систему (поскольку мне требуется больше, чем простое имя пользователя / пароль) перед настройкой IAuthenticationRequest.IsAuthenticated соответствующим образом. Я попытался сделать это способом «веб-форм» следующим образом:
private void DoAuthentication(IAuthenticationRequest request, HttpContext context)
{
if (context.Request.IsAuthenticated)
{
request.IsAuthenticated = true;
}
else
{
FormsAuthentication.RedirectToLoginPage();
}
}
Это работает почти так же, как клиентский браузер перенаправляется, и пользователь может войти в систему, эффективно устанавливая cookie для проверки подлинности форм, но когда страница входа в систему выполняет FormsAuthentication.RedirectFromLoginPage (), он чувствует, что весь контекст потерян ( я просто вижу страницу / провайдера и IAuthenticateRequest является нулевым). В этот момент, как и следовало ожидать, с установленным файлом cookie, если я повторно отправлю свой URL проверяющей стороне, все будет работать правильно, и аутентификация пройдет успешно.
Есть ли способ поддерживать контекст, необходимый для того, чтобы это могло работать? Или другой способ эффективно потребовать от пользователя перехода на страницу формы до обработки запроса IAuthenticationRequest?