2010-06-21 41 views
0

我升級到MVC2和最新的dotnetopenauth後,我一直得到「沒有找到OpenID端點」。當我嘗試使用谷歌應用程序登錄。我在本地主機上正常工作,但不在我的域上 - 任何想法?dotnetopenauth,MVC2沒有找到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(); 
     } 
    } 
} 

回答

3

這可能是一個信任問題。 Google Apps OpenID需要您的RP標記爲「完全信任」。也許它是在你的本地主機上,但不在你的現場?

+0

這工作,但奇怪的是,當升級到MVC2(它與MVC1工作正常)會改變 - 謝謝 – pch 2010-06-25 09:16:20