【问题标题】:Need Help with .NET OpenId HttpHandler在 .NET OpenId HttpHandler 方面需要帮助
【发布时间】: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


    【解决方案1】:

    重定向循环是因为如果您在没有电子邮件的情况下收到肯定的断言,您会立即将用户发送回请求它...一遍又一遍...问题是某些 OP 永远不会给您发送电子邮件地址。并且这些相同的 OP 可能会立即重定向另一个没有电子邮件地址的肯定断言。

    当声明没有得到肯定的断言时,您需要向用户显示一个您自己的页面,要求他亲自提出这些声明。

    【讨论】:

    • 谢谢!虽然,我还没有测试过,但你的答案是有道理的!然后我需要做的是有一个机制来只请求一次索赔,无论索赔请求成功/失败。
    【解决方案2】:

    通常,一旦您获得接受的请求,您希望存储声明的标识符并将其用于会话的其余部分。该消息可能意味着提供商拒绝您的请求,因为它认为您有重定向循环。您应该接受用户在会话结束之前经过身份验证,而不是在每个请求上验证 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-27
      • 2014-02-06
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多