簡體   English   中英

需要有關.NET OpenId HttpHandler的幫助

[英]Need Help with .NET OpenId HttpHandler

我正在嘗試使用單個HTTPHandler來驗證用戶的開放ID並接收ClaimResponse。 初始身份驗證有效,但claimresponse無效。 我收到的錯誤是“此網頁具有重定向循環”。 我究竟做錯了什么?

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

重定向循環是因為,如果您在沒有電子郵件的情況下得到肯定的斷言,則會立即將用戶發送回去要求它……一遍又一遍...問題是某些操作人員永遠不會給您提供電子郵件地址。 這些相同的OP可能會立即再次重定向,並再次缺少電子郵件地址。

當聲明沒有肯定的主張時,您需要向用戶顯示您自己的頁面,要求他個人提出這些聲明。

通常,一旦收到接受的請求,便要存儲聲明的標識符並將其用於會話的其余部分。 該消息可能表示提供程序正在拒絕您的請求,因為它認為您存在重定向循環。 您應該接受對用戶進行身份驗證,直到會話結束,而不是對每個請求都驗證ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM