2010-03-26 3 views
0

단일 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; 
      } 
     } 
    } 

답변

0

일반적으로 승인 요청을 받으면 주장 된 식별자를 저장하고 나머지 세션 동안 사용하기를 원합니다. 이 메시지는 리디렉션 루프가 있다고 판단하여 공급자가 요청을 거부하고 있음을 의미합니다. 모든 요청에서 ID를 확인하는 대신 세션이 끝날 때까지 사용자가 인증되었음을 인정해야합니다.

2

리디렉션 루프는 전자 메일 없이도 긍정적 인 주장을 얻으면 사용자에게 다시 물어 보려합니다 ... 반복해서 ... 문제는 일부 영업 담당자가 이메일 주소. 그리고 똑같은 영업 기회가 이메일 주소가 결여 된 다른 긍정적 인 주장과 함께 즉시 리디렉션 될 수 있습니다.

클레임이 긍정적 인 주장으로 돌아 오지 않으면 사용자에게 개인적으로 클레임을 묻는 페이지를 보여줘야합니다.

+0

고마워요! 비록 아직 테스트하지는 않았지만, 당신은 답을 이해합니다! 그 때해야 할 일은 클레임 요청의 성공/실패에 관계없이 클레임을 한 번만 요청하는 메커니즘입니다. –

관련 문제