Веб-пользователь DotNetOpenAuth не перенаправляется на поставщика OAuth в ASP.NET Приложение MVC

#asp.net-mvc #dotnetopenauth #google-authentication

#asp.net-mvc #dotnetopenauth #google-аутентификация

Вопрос:

У меня есть ASP.NET Приложение MVC, в котором я пытаюсь использовать DotNetOpenAuth для моего Google OAuth. Я использую класс GoogleConsumer из примера и пытаюсь выполнить первый шаг аутентификации. Приведенный ниже код по сути тот же, что и в предоставленном приложении WebForms, только в контроллере MVC:

 public string Authenticate()
{
  GoogleTokenManager tokenManager = new GoogleTokenManager(ConsumerKey, ConsumerSecret);
  WebConsumer webConsumer = new WebConsumer(GoogleConsumer.ServiceDescription, tokenManager);
  GoogleConsumer.RequestAuthorization(webConsumer, GoogleConsumer.Applications.Gmail);
  return "";
}
  

Код выполняется, когда я делаю AJAX-запрос к контроллеру, но я никогда не перенаправляюсь на страницу Google для аутентификации.

Ответ №1:

Базовый запрос возвращал ответ на перенаправление 302, который я не обрабатывал должным образом. Что я нашел более полезным, так это указать URL обратного вызова для другого действия в моем контроллере следующим образом:

 public ActionResult Authenticate()
{
  string callbackUrl = Request.Url.ToString().Replace("Authenticate", "OtherAction");
  Uri callback = new Uri(callbackUrl);

  WebConsumer webConsumer = new WebConsumer(GoogleConsumer.ServiceDescription, TokenManager);
  Dictionary<string, string> extraParameters = new Dictionary<string, string>();
  extraParameters.Add("scope", GoogleConsumer.GetScopeUri(GoogleConsumer.Applications.Gmail));

  UserAuthorizationRequest request = webConsumer.PrepareRequestUserAuthorization(callback, extraParameters, null);
  return webConsumer.Channel.PrepareResponse(request).AsActionResult();
}

public ActionResult OtherAction()
{
  // oauth_verifier, oauth_token are now in the RequestQueryString
}