Я пытаюсь получить доступ к Google Tasks, используя OAuth 2.0 через DotNetOpenAuth и the dotnet library for Google Tasks.Как мне изменить код авторизации для access_token?
Если честно, я немного озадачен всем процессом OAuth, но в любом случае.
Я пытаюсь следовать той же процедуре, что площадка OAuth2 проходит через в моем приложении: т.е.
- Пользователь нажимает ссылку санкционировать App
- App использует DotNetOpenAuth построить запрос на Google
- Пользователь предоставлен с помощью «Мое приложение хотел бы ..» и авторизует приложение
- Браузер перенаправлен на callback_uri с кодом авторизации
- Код заменен на ccess_token
- маркер доступа используется в последующих запросах
Я не беспокоясь о токенов обновления или что-нибудь еще.
Так что я до шага 5 и застрял. Я просто не могу понять, как обменять код авторизации для токена доступа.
Я вызываю метод на OAuthAuthenticator<T>
(часть Google Tasks Lib) называется LoadAccessToken
, который звучит как правильный метод, но это приводит к следующей ошибке:
The following required parameters were missing from the
DotNetOpenAuth.OAuth2.Messages.AccessTokenAuthorizationCodeRequest message: redirect_uri
Однако, как вы можете видеть из моего кода Я устанавливаю обратный вызов перед вызовом LoadAccessToken
.
Вот мой код:
public class AuthController : Controller
{
private const string clientId = "xxxx";
private const string secret = "xxxx";
public ActionResult Authenticate()
{
UserAgentClient consumer = new UserAgentClient(GoogleAuthenticationServer.Description, clientId, secret);
IAuthorizationState state = new AuthorizationState(new[] { TasksService.Scopes.Tasks.GetStringValue() });
state.Callback = new Uri(Url.Action("OAuthCallback","Auth",null,"http"));
var request = consumer.RequestUserAuthorization(state);
return Redirect(request.ToString());
}
public ActionResult OAuthCallback(string code)
{
UserAgentClient consumer = new UserAgentClient(GoogleAuthenticationServer.Description, clientId, secret);
OAuth2Authenticator<UserAgentClient> authenticator = new OAuth2Authenticator<UserAgentClient>(consumer, ProcessAuth);
IAuthorizationState state = new AuthorizationState(new[] { TasksService.Scopes.Tasks.GetStringValue() });
state.Callback = new Uri(Url.Action("OAuthSuccess", "Auth", null, "http"));
authenticator.LoadAccessToken();
return RedirectToAction("List","Home");
}
public ActionResult OAuthSuccess(string access_token)
{
Session["token"] = access_token;
return RedirectToAction("List", "Home");
}
private IAuthorizationState ProcessAuth(UserAgentClient arg)
{
var state = arg.ProcessUserAuthorization(Request.Url);
return state;
}
}
Любые идеи?
Это выглядит великолепно! –