0

我正在使用本教程: http: //www.dotnetopenauth.net/developers/help/programmatic-openid-relying-party/

我的 GetResponse() 调用总是返回 null,我还在 web.config 中将 localhost 添加到了我的白名单中。我觉得我做的一切都是正确的,并且无法在线找到解决方案。在调试时我查看 openid 对象。我有 2 个发现服务的计数..

我通过 JS 点击调用下面的方法。

[HttpPost]
        public void PingOpenID()
        {
            var openid = new OpenIdRelyingParty();
            IAuthenticationResponse response = openid.GetResponse();

            if (response != null)
            {
                switch (response.Status)
                {
                    case AuthenticationStatus.Authenticated:
                        FormsAuthentication.RedirectFromLoginPage(
                            response.ClaimedIdentifier, false);
                        break;
                    case AuthenticationStatus.Canceled:
                        ModelState.AddModelError("loginIdentifier",
                            "Login was cancelled at the provider");
                        break;
                    case AuthenticationStatus.Failed:
                        ModelState.AddModelError("loginIdentifier",
                            "Login failed using the provided OpenID identifier");
                        break;
                }
            }
        }
4

1 回答 1

1

您的问题提到您从“JS 点击”调用此方法。这不是 OpenID 的工作方式。OpenID 响应消息来自提供者,通过重定向到RP,而不是浏览器上运行的某些 JS。 GetResponse()可能返回 null 因为您的 JS 正在向 RP 发送一个空的 POST 并且其中不包含 OpenID 有效负载。

请注意,在某些特殊情况下,浏览器上的 RP 的 javascript 确实将 OpenID 响应“转发”到 RP 服务器,但这是非常先进的,不太可能是您试图从您的问题听起来完成的事情。

于 2012-08-23T13:52:19.217 回答