0

asp .Net MVCで初めて誰かがGoogleドキュメントAPIリフレッシュトークンを取得するのを手伝ってもらえますか?クライアントIdとクライアントSecreteがあります。リフレッシュトークンを取得する方法とリフレッシュトークンを取得する方法は、ドライブのGoogle APIにアクセスするためのアクセストークンを取得する方法です。Asp.Net MVCを使用してgoogle docs api refreshトークンとアクセストークンを取得

+0

GoogleドキュメントAPIのどのバージョンを調べましたか? – DaImTo

+0

私はgoogle api v3を使用しました。 –

+0

私はまだGoogleドキュメントAPIは実際には物事ではないので、GoogleドライブAPIを意味すると仮定しています – DaImTo

答えて

2

彼らはまだDrive API V3のサンプルコードで多くのことをしていません。私はこれらのスコープのすべてを使用しないで、あなたがこのコードを必要とするものを事前に生成します。

NuGetパッケージ

PM>Install-Package Google.Apis.Drive.v3

/// <summary> 
    /// This method requests Authentication from a user using Oauth2. 
    /// Credentials are stored in System.Environment.SpecialFolder.Personal 
    /// Documentation https://developers.google.com/accounts/docs/OAuth2 
    /// </summary> 
    /// <param name="clientSecretJson">Path to the client secret json file from Google Developers console.</param> 
    /// <param name="userName">Identifying string for the user who is being authentcated.</param> 
    /// <returns>DriveService used to make requests against the Drive API</returns> 
    public static DriveService AuthenticateOauth(string clientSecretJson, string userName) 
    { 
     try 
     { 
      if (string.IsNullOrEmpty(userName)) 
       throw new Exception("userName is required."); 
      if (!File.Exists(clientSecretJson)) 
       throw new Exception("clientSecretJson file does not exist."); 

      // These are the scopes of permissions you need. It is best to request only what you need and not all of them 
      string[] scopes = new string[] { DriveService.Scope.Drive,     // View and manage the files in your Google Drive 
              DriveService.Scope.DriveAppdata,   // View and manage its own configuration data in your Google Drive 
              DriveService.Scope.DriveFile,    // View and manage Google Drive files and folders that you have opened or created with this app 
              DriveService.Scope.DriveMetadata,   // View and manage metadata of files in your Google Drive 
              DriveService.Scope.DriveMetadataReadonly, // View metadata for files in your Google Drive 
              DriveService.Scope.DrivePhotosReadonly,  // View the photos, videos and albums in your Google Photos 
              DriveService.Scope.DriveReadonly,   // View the files in your Google Drive 
              DriveService.Scope.DriveScripts};   // Modify your Google Apps Script scripts' behavior 
      UserCredential credential; 
      using (var stream = new FileStream(clientSecretJson, FileMode.Open, FileAccess.Read)) 
      { 
       string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
       credPath = Path.Combine(credPath, ".credentials/apiName"); 

       // Requesting Authentication or loading previously stored authentication for userName 
       credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets, 
                     scopes, 
                     userName, 
                     CancellationToken.None, 
                     new FileDataStore(credPath, true)).Result; 
      } 

      // Create Drive API service. 
      return new DriveService(new BaseClientService.Initializer() 
       { 
        HttpClientInitializer = credential, 
        ApplicationName = "Drive Authentication Sample", 
       }); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Create Oauth2 DriveService failed" + ex.Message); 
      throw new Exception("CreateOauth2DriveFailed", ex); 
     } 
    } 

サービスアカウントJSONキーファイルはありませんp12の

/// <summary> 
    /// Authenticating to Google using a Service account 
    /// Documentation: https://developers.google.com/accounts/docs/OAuth2#serviceaccount 
    /// 
    /// Note: Not all APIs support service accounts I cant garentee this will work. If you find an api that doesnt support service accoutns contact me 
    ///  me at www.daimto.com and I will remove it from auto genration of this APIs sample project. 
    /// </summary> 
    /// <param name="serviceAccountEmail">From Google Developer console https://console.developers.google.com</param> 
    /// <param name="serviceAccountCredentialFilePath">Location of the Json Service account key file downloaded from Google Developer console https://console.developers.google.com</param> 
    /// <returns>DriveService used to make requests against the Drive API</returns> 
    public static DriveService AuthenticateServiceAccount(string serviceAccountCredentialFilePath) 
    { 
     try 
     { 
      if (string.IsNullOrEmpty(serviceAccountCredentialFilePath)) 
       throw new Exception("Path to the .JSon service account credentials file is required."); 
      if (!File.Exists(serviceAccountCredentialFilePath)) 
       throw new Exception("The service account credentials .JSon file does not exist at:" + serviceAccountCredentialFilePath); 

      // These are the scopes of permissions you need. It is best to request only what you need and not all of them 
      string[] scopes = new string[] { DriveService.Scope.Drive,     // View and manage the files in your Google Drive 
              DriveService.Scope.DriveAppdata,   // View and manage its own configuration data in your Google Drive 
              DriveService.Scope.DriveFile,    // View and manage Google Drive files and folders that you have opened or created with this app 
              DriveService.Scope.DriveMetadata,   // View and manage metadata of files in your Google Drive 
              DriveService.Scope.DriveMetadataReadonly, // View metadata for files in your Google Drive 
              DriveService.Scope.DrivePhotosReadonly,  // View the photos, videos and albums in your Google Photos 
              DriveService.Scope.DriveReadonly,   // View the files in your Google Drive 
              DriveService.Scope.DriveScripts};   // Modify your Google Apps Script scripts' behavior 
      Stream stream = new FileStream(serviceAccountCredentialFilePath, FileMode.Open, FileAccess.Read, FileShare.Read); 
      var credential = GoogleCredential.FromStream(stream).CreateScoped(scopes); 

      // Create the Drive service. 
      return new DriveService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = "Drive Authentication Sample", 
      }); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Create service account DriveService failed" + ex.Message); 
      throw new Exception("CreateServiceAccountDriveServiceFailed", ex); 
     } 
    } 

は、私が持っているあなたが何かを必要とするなら、私を知ってみましょう部分的なサンプルプロジェクトが構築されました。

+0

ありがとうDalmTo。私はUserCredentialとDriveServiceを正常に取得しました。私のサイト訪問者がGoogleドライブにファイルをアップロードできる可能性があることを教えてください。私はバックグラウンドでoauthを認証します。だから私はこれをどのように達成できますか?ユーザーがあなたのアカウントにアップロードできるようにするには、 –

+0

Oauth2ではなくサービスアカウントの使用を検討する必要があります。その後、ドライブアカウントのフォルダをサービスアカウントと共有できます。サービスアカウントはダミーユーザーの一種で、サービスアカウントはドライブフォルダーにアップロードできます。サービスアカウントはアップロード後にアクセス許可を与えるためにファイルのアクセス許可を更新する必要があります。アクセス権がありません。 – DaImTo

+0

を入力する前に、サービスアカウント認証のためのコードをいくつか追加してください。と私のチュートリアルサービスアカウントについては、あなたがコンセプトを理解しているので、http://www.daimto.com/google-developer-console-service-account/ – DaImTo

関連する問題