단일 HTTPHandler를 사용하여 사용자의 공개 ID를 인증하고 claimresponse를 수신하려고합니다. 초기 인증은 작동하지만 claimresponse는 작동하지 않습니다. 내가받는 오류는 '이 웹 페이지에 리디렉션 루프가 있습니다.'입니다. 내가 도대체 뭘 잘못하고있는 겁니까?.NET OpenId HttpHandler 도움말이 필요합니다.
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;
}
}
}
고마워요! 비록 아직 테스트하지는 않았지만, 당신은 답을 이해합니다! 그 때해야 할 일은 클레임 요청의 성공/실패에 관계없이 클레임을 한 번만 요청하는 메커니즘입니다. –