2012-10-11 24 views
7

this question'un devamı olarak, dotnetopenauth ile ilgili bir sorunum var.Bir OpenID alanı, web sitesinin temel URL'si olmalı mı?

Temel olarak, RP'de belirtilen alanın uygulamanın temel temel URL'si olması gerekip gerekmediğini merak ediyorum. Yani, (http://localhost:1903)? Var olan mimariyi yerine getirirken, yönlendirmeyi kaldırmak zordur - Alanı OpenId denetleyicisine (http://localhost:1903/OpenId) ayarlamayı denedim ve XRDS belgesini el ile test ettim. Ancak uygulama dondurmak görünüyor ve AP günlüğü aşağıdaki hatayı ortaya koymaktadır:

2012-10-10 15:17:46,000 (GMT-4) [24] ERROR DotNetOpenAuth.OpenId - Attribute Exchange extension did not provide any aliases in the if_available or required lists.

Kodu:

güvenerek Partisi:

public ActionResult Authenticate(string RuserName = "") 
{ 
UriBuilder returnToBuilder = new UriBuilder(Request.Url); 
returnToBuilder.Path = "/OpenId/Authenticate"; 
returnToBuilder.Query = null; 
returnToBuilder.Fragment = null; 

Uri returnTo = returnToBuilder.Uri; 
returnToBuilder.Path = "/"; 
Realm realm = returnToBuilder.Uri; 

var response = openid.GetResponse(); 

if (response == null) { 
    if (Request.QueryString["ReturnUrl"] != null && User.Identity.IsAuthenticated) { 

    } else { 

    string strIdentifier = "http://localhost:3314/User/Identity/" + RuserName; 
    var request = openid.CreateRequest(
     strIdentifier, 
     realm, 
     returnTo); 

    var fetchRequest = new FetchRequest(); 
    request.AddExtension(fetchRequest); 
    request.RedirectToProvider(); 
    } 
} else { 
    switch (response.Status) { 
     case AuthenticationStatus.Canceled: 
      break; 
     case AuthenticationStatus.Failed: 
      break; 
     case AuthenticationStatus.Authenticated: 
      //log the user in 
      break; 
    } 
} 

return new EmptyResult(); 

}

Sağlayıcı:

public ActionResult Index() 
{ 
    IRequest request = OpenIdProvider.GetRequest(); 

    if (request != null) { 
     if (request.IsResponseReady) { 
      return OpenIdProvider.PrepareResponse(request).AsActionResult(); 
     } 

     ProviderEndpoint.PendingRequest = (IHostProcessedRequest)request; 
     return this.ProcessAuthRequest(); 
    } else { 
     //user stumbled on openid endpoint - 404 maybe? 
     return new EmptyResult(); 
    } 
} 

public ActionResult ProcessAuthRequest() 
    { 
     if (ProviderEndpoint.PendingRequest == null) { 
      //there is no pending request 
      return new EmptyResult(); 
     } 

     ActionResult response; 
     if (this.AutoRespondIfPossible(out response)) { 
      return response; 
     } 

     if (ProviderEndpoint.PendingRequest.Immediate) { 
      return this.SendAssertion(); 
     } 

     return new EmptyResult(); 
    } 
+0

Dondurmayı detaylandırır mısınız? Donmuş tarayıcı mı? Yoksa web sayfası akışındaki bir noktada değişmiyor mu? Sonsuz yönlendirmelere mi giriyorsunuz? –

cevap

10

Sorunuzun yanıtı "hayır". Alan, sitenizin temel URL'si ile return_to URL'niz arasında herhangi bir URL olabilir. senin return_to URL http://localhost:1903/OpenId/Authenticate Yani eğer örneğin, aşağıdaki tüm geçerli realms şunlardır:

  • http://localhost:1903/OpenId/Authenticate
  • http://localhost:1903/OpenId/
  • http://localhost:1903/
  • aşağıdaki

verilen değil geçerli alemler dönüş_to yukarıda:

  • http://localhost:1903/OpenId/Authenticate/ (ekstra eğik çizgi)
  • http://localhost:1903/openid/ (küçük harf duyarlı!)
  • https://localhost:1903/ (şema değişikliği)

Çünkü böyle kesin alemine dayanarak kullanıcıları için Google sorunu ikili tek belirleyici olarak bazı OpenID'yi Sağlayıcıları URL, alanınızın web sitenizin temel URL'si olması için önerilir, böylece en istikrarlı olur (sitenizi yeniden tasarlamak, sitenizi değiştirmez). Ayrıca, HTTPS'yi HTTPS yapabilmeniz için HTTPS'nizin HTTPS olmasını ve bu şekilde biraz daha güvenli olmasını sağlaması (DNS zehirlenmesi saldırılarını azaltır) olması da önerilir.

Günlüğündeki hatanın nedeni, RP'nizin OpenID kimlik doğrulaması isteğine FetchRequest uzantısını oluşturması ve eklemesi, ancak FetchRequest'i istediğiniz gerçek özniteliklerle başlatmamış olmanızdır.

Sağladığınız bilgilerle uygulamanızın neden donmadığını size anlatamadım.

+0

Tamam, teşekkürler. Alanı terk edeceğim, çünkü çalışıyor gibi görünüyor. Ayrıca fetchrequest'i kaldırdım ve hata gitti."Donma", neler olduğunu açıklamak için yanlış bir terimdi - Biraz daha araştırdım, yeni bir soru yayınlayacağım. Teşekkürler! – Mansfield

İlgili konular