0

在我升级到 MVC2 和最新的 dotnetopenauth 后,我不断收到“找不到 OpenID 端点”。当我尝试使用谷歌应用程序登录时。我在本地主机上工作得很好,但在我的域上却不行——有什么想法吗?

namespace TheDataEngineMVCb1.Areas.Admin.Controllers
{
    using System;
    using System.Collections.Generic;
    using System.Diagnostics.CodeAnalysis;
    using System.Globalization;
    using System.Linq;
    using System.Security.Principal;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Security;
    using System.Web.UI;
    using DotNetOpenAuth.Messaging;
    using DotNetOpenAuth.OpenId;
    using DotNetOpenAuth.OpenId.RelyingParty;
    using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration;

    [HandleError]
    public class AccountController : Controller
    {
        private static readonly HostMetaDiscoveryService GoogleAppsDiscovery = new HostMetaDiscoveryService
        {
            UseGoogleHostedHostMeta = true,
        };

        private static OpenIdRelyingParty openid = new OpenIdRelyingParty();

        public ActionResult Index()
        {
            return View("Index");
        }

        public ActionResult LoginPopup()
        {
            return View("LoginPopup");
        }

        public ActionResult Logout()
        {
            FormsAuthentication.SignOut();
            return Redirect("/Admin");
        }

        public ActionResult Login()
        {
            // Stage 1: display login form to user
            return View("Login");
        }

        [ValidateInput(false)]
        public ActionResult Authenticate(string returnUrl)
        {
            openid.DiscoveryServices.Clear();
            openid.DiscoveryServices.Insert(0, GoogleAppsDiscovery);
            var response = openid.GetResponse();
            if (response == null)
            {
                // Stage 2: user submitting Identifier
                Identifier id;

                if (Identifier.TryParse(Request.Form["openid_identifier"], out id) && Request.Form["openid_identifier"]!=null)
                {
                    try
                    {

                        Session["openid_identifier"] = Server.HtmlEncode(Request.Form["openid_identifier"]);
                        var request = openid.CreateRequest(Request.Form["openid_identifier"]);

                        return request.RedirectingResponse.AsActionResult();
                    }
                    catch (ProtocolException ex)
                    {
                        ViewData["Message"] = ex.Message;
                        return View("Login");
                    }
                }
                else
                {
                    ViewData["Message"] = "Invalid identifier";
                    return View("Login");
                }
            }
            else
            {
                // Stage 3: OpenID Provider sending assertion response
                switch (response.Status)
                {
                    case AuthenticationStatus.Authenticated:
                        string authEmail = Request["dnoa.userSuppliedIdentifier"].ToString();

                        FormsAuthentication.SetAuthCookie(authEmail, false);

                        if (!string.IsNullOrEmpty(returnUrl))
                        {
                            return Redirect(returnUrl);
                        }
                        else
                        {
                            return RedirectToAction("Index", "Home");
                        }
                    case AuthenticationStatus.Canceled:
                        ViewData["Message"] = "Canceled at provider";
                        return View("Login");
                    case AuthenticationStatus.Failed:
                        ViewData["Message"] = response.Exception.Message;
                        return View("Login");
                }
            }
            return new EmptyResult();
        }
    }
}
4

1 回答 1

3

这可能是一个信任问题。Google Apps OpenID 要求您的 RP 标记为完全信任。也许它在您的本地主机上,但不在您的实时站点上?

于 2010-06-24T23:37:13.973 回答