2013-06-18 2 views
3

Я использую google + api для .NET в своем приложении. Используя пример, приведенный в this сайт, я могу получить токен доступа.Получение токена доступа из токена обновления с помощью API Google

Моя проблема заключается в том, как получить токен доступа из токена обновления с помощью OAuth 2.0. Я не нашел примеров, чтобы получить токен доступа из токена обновления.

Я упомянул ссылку [google + API], но они упомянули об этом с помощью методов HTTP. 2 Просьба привести несколько примеров на C#, используя методы, предоставляемые API google +.

+2

http://stackoverflow.com/questions/11458644/how-to-generate-access-token-using-refresh-token-through-google-drive-sdk-in -ne – divyanshm

+1

Спасибо @divyanshm, ссылка, которую вы предоставили, помогла мне решить проблему. У меня есть одно сомнение. У этого токена обновления есть срок действия? Если это так, то как это узнать? – Naren

+2

Обновить токены, по определению, не имеют срока действия. Они действительны до тех пор, пока пользователь явно не аннулирует разрешения. Ваше приложение может сохранять их навсегда и обменивать их на токены доступа по мере необходимости. – divyanshm

ответ

1

В первый раз вам нужно получить токен доступа из приглашения браузера, а затем сохранить его в каком-либо магазине.

Проверьте, истекает ли токен, а затем попытайтесь его обновить.

код здесь:

private static IAuthorizationState GetAuthentication(NativeApplicationClient arg) 
    { 
     try 
     { 

      // Get the auth URL: 
      var config = new Configuration(); 
      var calendarScope = Google.Apis.Util.Utilities.ConvertToString(CalendarService.Scopes.Calendar); 
      IAuthorizationState state = new AuthorizationState(new[] { calendarScope }); 
      state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl); 
      Uri authUri = arg.RequestUserAuthorization(state); 
      var authCode = String.Empty; 

      if (String.IsNullOrWhiteSpace(config.AccessToken) || config.AccessTokenExpirationTime < DateTime.Now || String.IsNullOrWhiteSpace(config.RefreshToken)) 
      { 

       // Request authorization from the user (by opening a browser window): 
       Process.Start(authUri.ToString()); 
       do 
       { 
        authCode = Prompt.ShowDialog("Test", "123"); 
       } while (String.IsNullOrWhiteSpace(authCode)); 
       state = arg.ProcessUserAuthorization(authCode, state); 
      } 
      else 
      { 
       state.AccessToken = config.AccessToken; 
       state.AccessTokenExpirationUtc = config.AccessTokenExpirationTime; 
       state.AccessTokenIssueDateUtc = config.AccessTokenIssueTime; 
       state.RefreshToken =config.RefreshToken ; 
       if (state.AccessTokenExpirationUtc < DateTime.Now) 
       { 
        var tokenRefreshed = arg.RefreshToken(state); 
        if (tokenRefreshed) 
        { 
         config.AccessToken = state.AccessToken; 
         config.AccessTokenExpirationTime = state.AccessTokenExpirationUtc; 
         config.AccessTokenIssueTime = state.AccessTokenIssueDateUtc; 
         config.RefreshToken = state.RefreshToken; 
         arg.ProcessUserAuthorization(authCode, state); 
        } 
        else 
        { 
         throw new ApplicationException("Unable to refresh the token."); 
        } 
       } 
      } 
      return state; 
     } 
     catch (System.Exception exp) 
     { 
      throw new ApplicationException("Failed to get authorisation from Google Calender.", exp); 
     } 
    } 
Смежные вопросы