DotNetOpenAuth WebConsumer не перенаправляет к провайдеру OAuth в приложении ASP.NET MVC - PullRequest
2 голосов
/ 26 апреля 2011

У меня есть приложение 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 Ответ

3 голосов
/ 26 апреля 2011

Основной запрос возвращал ответ 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
}
...