【发布时间】:2010-03-26 19:58:55
【问题描述】:
我正在尝试使用单个 HTTPHandler 来验证用户的开放 ID 并接收声明响应。初始身份验证有效,但声明响应无效。我收到的错误是“此网页有重定向循环”。我做错了什么?
public class OpenIdLogin : IHttpHandler
{
private HttpContext _context = null;
public void ProcessRequest(HttpContext context)
{
_context = context;
var openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if (response == null)
{
// Stage 2: user submitting Identifier
openid.CreateRequest(context.Request.Form["openid_identifier"]).RedirectToProvider();
}
else
{
// Stage 3: OpenID Provider sending assertion response
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
//FormsAuthentication.RedirectFromLoginPage(response.ClaimedIdentifier, false);
string identifier = response.ClaimedIdentifier;
//****** TODO only proceed if we don't have the user's extended info in the database **************
ClaimsResponse claim = response.GetExtension<ClaimsResponse>();
if (claim == null)
{
//IAuthenticationRequest req = openid.CreateRequest(identifier);
IAuthenticationRequest req = openid.CreateRequest(Identifier.Parse(identifier));
var fields = new ClaimsRequest();
fields.Email = DemandLevel.Request;
req.AddExtension(fields);
req.RedirectingResponse.Send(); //Is this correct?
}
else
{
context.Response.ContentType = "text/plain";
context.Response.Write(claim.Email); //claim.FullName;
}
break;
case AuthenticationStatus.Canceled:
//TODO
break;
case AuthenticationStatus.Failed:
//TODO
break;
}
}
}
【问题讨论】:
标签: c# .net openid httphandler