Привет! Я создал сайт, на котором у меня есть логин OpenId.Когда вы нажимаете кнопку входа в систему, я вызываю ajax-метод, который в основном вызывает это с помощью ajax-вызова:
[WebMethod]
public static LoginResult Login(string url)
{
Identifier id;
LoginResult result = new LoginResult();
if (Identifier.TryParse(url, out id))
{
try
{
//request openid_identifier
FetchRequest fetch = new FetchRequest();
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.Alias);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.First);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.Last);
string rootUrl = "http://" + HttpContext.Current.Request.Headers["Host"] + "/";
IAuthenticationRequest request = openid.CreateRequest(url, new Realm(rootUrl), new Uri(rootUrl + "?action=verify"));
request.AddExtension(fetch);
result.RedirectUrl = request.RedirectingResponse.Headers["Location"];
}
catch (ProtocolException ex)
{
result.ErrorMessage = ex.Message;
}
}
else
{
result.ErrorMessage = "Could not parse identifier!";
}
return result;
}
, это прекрасно работает, javascript получает «RedirectUrl» и перенаправляет на него, после проверки при открытомПоставщик идентификатора завершен, я получаю ответ на что-то вроде этого
http://localhost:33386/?action=verify&dnoa.userSuppliedIdentifier=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid&openid.ns=http%3A%2F%2Fspecs.openid.net%2............
Но когда я вызываю openid.GetResponse () и проверяю статус, это не удалось.Если я проверяю исключение, оно содержит следующее сообщение
Параметр openid.return_to (http://localhost:33386/?action=verify&dnoa.userSuppliedIdentifier=https:%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid) не соответствует фактическому URL-адресу (http://localhost:33386/default.aspx?action=verify&dnoa.userSuppliedIdentifier=https:%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid&openid.ns=http:%2F%2Fspecs.openid.net%2Fauth........
Что я здесь не так делаю)?
Примечание: причина, по которой я пытаюсь указать returnUrl, заключается в том, что мой веб-сервис расположен в ~ \ WebApi.aspx, это не то место, где я хочу приземлиться, когда выполняю запрос. Я попытался посмотреть на сборку.с ILSpy, но методы «CreateRequest» более или менее пусты ..