2013-03-25 2 views
0

Я пытаюсь получить доступ к Google Tasks, используя OAuth 2.0 через DotNetOpenAuth и the dotnet library for Google Tasks.Как мне изменить код авторизации для access_token?

Если честно, я немного озадачен всем процессом OAuth, но в любом случае.

Я пытаюсь следовать той же процедуре, что площадка OAuth2 проходит через в моем приложении: т.е.

  1. Пользователь нажимает ссылку санкционировать App
  2. App использует DotNetOpenAuth построить запрос на Google
  3. Пользователь предоставлен с помощью «Мое приложение хотел бы ..» и авторизует приложение
  4. Браузер перенаправлен на callback_uri с кодом авторизации
  5. Код заменен на ccess_token
  6. маркер доступа используется в последующих запросах

Я не беспокоясь о токенов обновления или что-нибудь еще.

Так что я до шага 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; 
    } 
} 

Любые идеи?

ответ

1

Check out the documentation для примера о том, как использовать код DotNet.OAuth2. У этого есть отличный пример, чтобы показать вам, как получить настройку танца OAuth.

+0

Это выглядит великолепно! –

Смежные вопросы