0

Я провел некоторое время в течение последних нескольких дней, пытаясь реализовать функцию для своего веб-приложения. Функция должна добавлять новые события в календарь Google Google, когда они находятся в автономном режиме. Я прочитал документацию Google OAuth2 для приложений веб-сервера и, похоже, понял ее основы. Я создал ссылку авторизовать приложение для автономного доступа:DotNetOpenAuth Google API Offline Access

<a target='_blank' href='https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Ftasks&response_type=code&client_id=<MY CLIENT ID>&access_type=offline&redirect_uri=http%3A%2F%2Flocalhost:49949%2Foauth2callback.aspx'>Grant Tasks Permission</a> 

Если пользователь принимает то я захватить маркер обновления на перенаправление URI, как это:

private static OAuth2Authenticator<WebServerClient> _authenticator; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (HttpContext.Current.Request["code"] != null) 
     { 
      _authenticator = CreateAuthenticator(); 
      _authenticator.LoadAccessToken(); 
     } 
     Response.Write("Refresh Token: " + _authenticator.State.RefreshToken); 

    } 

    private OAuth2Authenticator<WebServerClient> CreateAuthenticator() 
    { 
     var provider = new WebServerClient(GoogleAuthenticationServer.Description); 
     provider.ClientIdentifier = "<MY CLIENT ID>"; 
     provider.ClientSecret = "<MY CLIENT SECRET>"; 
     return new OAuth2Authenticator<WebServerClient>(provider, GetAuthorization); 
    } 

    private IAuthorizationState GetAuthorization(WebServerClient client) 
    { 
     return client.ProcessUserAuthorization(new HttpRequestInfo(HttpContext.Current.Request)); 
    } 

Для тестирования я копировал токен обновления в текстовый файл для дальнейшего использования.

У меня проблема в использовании этого токена обновления для доступа к сети. Я использовал этот код, чтобы обновить токен:

Все кажется прекрасным на данный момент. Когда я просматриваю код, я вижу результат от клиента. RefreshToken (state) - true. Проблема заключается в том, когда я вызываю эту строку кода:

_service.Tasklists.List().Fetch(); 

Он возвращает (401) несанкционированную ошибку из Google. Я изучаю причину, но я не уверен, как действовать, и я быстро использую эту функцию. Любые советы будут очень признательны. Благодаря!

ответ

0

Кажется просто акт о вводе кода здесь всегда помогает мне понять это немного раньше :)

Теперь кажется, эта линия не является необходимым:

return client.ProcessUserAuthorization(); 

удаления, что из метода GetAuthorization и просто возврат состояния, переданного в RefreshToken, разрешил несанкционированную ошибку. Я оставлю этот вопрос на случай, если он пьет кого-нибудь еще.

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