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();
}
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? –