title: retrieve the user-credential of Google drive login
body: <p>I need to retrieve the user-credential of Google drive login. Suppose I have an account in google drive and I want to retrieve the user info - how can I get this working in C#?</p>
  
  <p>When I run the code below, I get errors:</p>
  
  <pre><code>using System;
  using System.Diagnostics;
  using DotNetOpenAuth.OAuth2;
  using Google.Apis.Authentication.OAuth2;
  using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
  using Google.Apis.Drive.v2;
  using Google.Apis.Drive.v2.Data;
  using Google.Apis.Util;
  using Google.Apis.Requests;
  using System.Collections.Generic;
  using System.Net;
  using Google.GData.Client;
  using Google.GData.Documents;
  using Google.GData.Extensions;
  using Google.Apis.Oauth2.v2;
  using Google.Apis.Oauth2.v2.Data;
  using Google.Apis.Authentication;
  namespace google_drive_iterate_folders
  {
      class Program
      {
  
      static DriveService BuildService(IAuthenticator credentials)
      {
          return new DriveService(credentials);
      }
  
  
      public static IAuthenticator GetCredentials(String authorizationCode, String state)
      {
          String emailAddress = "";
          try
          {
              IAuthorizationState credentials = ExchangeCode(authorizationCode);
              Userinfo userInfo = GetUserInfo(credentials);
              String userId = userInfo.Id;
              emailAddress = userInfo.Email;
              if (!String.IsNullOrEmpty(credentials.RefreshToken))
              {
                  StoreCredentials(userId, credentials);
                  return GetAuthenticatorFromState(credentials);
              }
              else
              {
                  credentials = GetStoredCredentials(userId);
                  if (credentials != null &amp;&amp;
                      !String.IsNullOrEmpty(credentials.RefreshToken))
                  {
                      return GetAuthenticatorFromState(credentials);
                  }
              }
          }
          catch (Exception ex)
          {
              Console.WriteLine("An error occurred during code exchange.");
              // Drive apps should try to retrieve the user and credentials for
              // the current session.
              // If none is available, redirect the user to the authorization URL.
              e.AuthorizationUrl = GetAuthorizationUrl(emailAddress, state);
              throw e;
          }
          //catch ()
          //{
          //    Console.WriteLine("No user ID could be retrieved.");
          //}
          // No refresh token has been retrieved.
          String authorizationUrl = GetAuthorizationUrl(emailAddress, state);
          throw new NoRefreshTokenException(authorizationUrl);
      }
  
      /// &lt;summary&gt;
      /// Exchange an authorization code for OAuth 2.0 credentials.
      /// &lt;/summary&gt;
      /// &lt;param name="authorizationCode"&gt;Authorization code to exchange
      //// for OAuth 2.0 credentials.&lt;/param&gt;
      /// &lt;returns&gt;OAuth 2.0 credentials.&lt;/returns&gt;
      /// &lt;exception cref="CodeExchangeException"&gt;An error occurred.&lt;/exception&gt;
      static IAuthorizationState ExchangeCode(String authorizationCode)
      {
          var provider = new NativeApplicationClient(
              GoogleAuthenticationServer.Description,
              ClientCredentials.CLIENT_ID,
              ClientCredentials.CLIENT_SECRET);
          IAuthorizationState state = new AuthorizationState();
          state.Callback = new Uri(ClientCredentials.REDIRECT_URI);
          try
          {
              state = provider.ProcessUserAuthorization(authorizationCode, state);
              return state;
          }
          catch (ProtocolException)
          {
              throw new CodeExchangeException(null);
          }
      }
  
      /// &lt;summary&gt;
      /// Send a request to the User Info API to retrieve the user's information.
      /// &lt;/summary&gt;
      /// &lt;param name="credentials"&gt;OAuth 2.0 credentials to authorize
      //// the request.&lt;/param&gt;
      /// &lt;returns&gt;User's information.&lt;/returns&gt;
      /// &lt;exception cref="NoUserIdException"&gt;An error occurred.&lt;/exception&gt;
      static Userinfo GetUserInfo(IAuthenticator credentials)
      {
          Oauth2Service userInfoService = new Oauth2Service(credentials);
          Userinfo userInfo = null;
          try
          {
              userInfo = userInfoService.Userinfo.Get().Fetch();
          }
          catch (GoogleApiRequestException e)
          {
              Console.WriteLine("An error occurred: " + e.Message);
          }
  
          if (userInfo != null &amp;&amp; !String.IsNullOrEmpty(userInfo.Id))
          {
              return userInfo;
          }
          else
          {
              throw new NoUserIdException();
          }
      }
  
      /// &lt;summary&gt;
      /// Retrieve an IAuthenticator instance using the provided state.
      /// &lt;/summary&gt;
      /// &lt;param name="credentials"&gt;OAuth 2.0 credentials to use.&lt;/param&gt;
      /// &lt;returns&gt;Authenticator using the provided OAuth 2.0
      /// credentials&lt;/returns&gt;
      public static IAuthenticator GetAuthenticatorFromState(
          IAuthorizationState credentials)
      {
          var provider = new StoredStateClient(
              GoogleAuthenticationServer.Description, ClientCredentials.CLIENT_ID,
              ClientCredentials.CLIENT_SECRET, credentials);
          var auth = new OAuth2Authenticator&lt;StoredStateClient&gt;(
              provider, StoredStateClient.GetState..
  </code></pre>