【发布时间】:2011-04-06 17:07:41
【问题描述】:
我有一个作为自定义 HttpHandler 的程序集(实现 IHttpHandler 并在 web.config 中注册了一个块),我想提供 openid 提供程序功能。在查看 DotNetOpenAuth 示例时,我在 OpenIdOfflineProvider 之后对我的处理程序进行了建模 - 因为此示例(至少在其根源上)是一个简单的 HttpListener,在代码中具有所有提供程序功能。我可以将我的 url 提供给依赖方(webforms 示例 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() 时,感觉所有上下文都丢失了(我只看到 /provider 页面和 IAuthenticateRequest 为空)。此时,如您所料,设置了 cookie 后,如果我将我的 url 重新提交给依赖方,一切正常并且身份验证成功。
有没有办法保持必要的上下文以便它可以工作?或者在处理 IAuthenticationRequest 之前有效地要求用户点击表单页面的另一种方法?
【问题讨论】:
标签: c# dotnetopenauth