#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
}