2013-10-29 12 views
5

別のユーザーの代理として動作するサービスアカウントを使用してDriveServiceを作成しようとしました。私はGoogleのドキュメントからこのコードをコピーしたAssertionFlowClientが機能しなくなりましたが、ServiceAccountCredentialを使用しようとしましたが、動作しません。

はここhttps://developers.google.com/drive/delegation

static DriveService BuildService() { 
      X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.Exportable); 
     var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate) 

     { 
      ServiceAccountId = SERVICE_ACCOUNT_EMAIL, 
      Scope = DriveService.Scopes.Drive.GetStringValue(), 
     }; 
     var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); 
     return new DriveService(auth); 
    } 

を見つけましたが、プロジェクト構築しようとしたとき、私はこの警告を得る:

は4「Google.Apis.Authentication.OAuth2警告を。 DotNetOpenAuth.AssertionFlowClient 'は廃止されました:' AssertionFlowClientはこれ以上サポートされておらず、1.7.0-betaで削除されます。新しいGoogle.Apis.Auth NuGetパッケージのServiceAccountCredentialの使用を検討してください。

と私も、このエラーが出る:

エラー11引数1: 'Google.Apis.Services.BaseClientService.Initializer'

に 'Google.Apis.Authentication.OAuth2.OAuth2Authenticator' から変換することはできません私はこのコードをビルドしようとすると、それはすべての罰金だが、私はそれを実行したときに、私は次のエラーを取得する

static DriveService BuildService() { 
      X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.Exportable); 

     ServiceAccountCredential credential = new ServiceAccountCredential(
      new ServiceAccountCredential.Initializer(SERVICE_ACCOUNT_EMAIL) 
      { 
       User = "[email protected]", 
       Scopes = new[] { DriveService.Scope.DriveFile } 
      }.FromCertificate(certificate)); 

     var service = new DriveService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = "Drive API Sample", 
     }); 

     return service; 
    } 

:それから私はServiceAccountCredentialをGoogleで検索して、このコード(https://code.google.com/p/google-api-dotnet-client/wiki/OAuth2#Service_Accountsこのページから派生)になってしまいました。デットGARのINTEのatt hitta DETのbegärdaのobjektet:

型 'System.Security.Cryptography.CryptographicException' の最初の機会例外

はがmscorlib.dll

で発生しました追加情報。 (翻訳された:要求されたオブジェクトが見つかりません)

この例外のハンドラがある場合、プログラムは安全に続行されます。

エラーは、この行で発生します

X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.Exportable); 

誰もが任意のアイデアがありますか?

タイプの未処理の例外 'Google.Apis.Auth.OAuth2.Responses.TokenResponseException':

{ 
     Console.WriteLine("Drive API - Service Account"); 
     Console.WriteLine("=========================="); 

     String serviceAccountEmail = "<some email>@developer.gserviceaccount.com"; 

     var certificate = new X509Certificate2(@"key.p12", "notasecret", X509KeyStorageFlags.Exportable); 

     ServiceAccountCredential credential = new ServiceAccountCredential(
      new ServiceAccountCredential.Initializer(serviceAccountEmail) 
      { 
       User = "<someuser>@<mydomain>.mygbiz.com", 
       Scopes = new[] { DriveService.Scope.Drive } 
      }.FromCertificate(certificate)); 

     // Create the service. 
     var service = new DriveService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = "DrvMgr", 
     }); 

     Console.WriteLine("Executing listing"); 
     FileList UserFiles = service.Files.List().Execute(); 

は、私は、このエラーメッセージが表示されます:

アップデート2013年10月31日 私はこのコードを試してみましたGoogle.Apis.dll

で発生しました追加情報:エラー: "ACCESS_DENIED"、説明: ""、ウリ: ""

答えて

0

は、それは見えますあなたのp12ファイルへのパスが間違っています。実際の解決法については、Plus.ServiceAccountサンプルを参照してください。

このサンプルでは、​​key.p12が常に出力ディレクトリにコピーされるコンテンツファイルとしてプロジェクトに追加されたと思います。コードから "key.p12"ファイルパスを指定すると、このファイルが出力フォルダから取得されます。

+0

申し訳ありませんが、パスがチェックされ、すべてのoki(私はC:\ temp \ keyに入れます。p12) そして、私は行を次のように変更します: X509Certificate2証明書=新しいX509Certificate2(@ "C:\ temp \ key.p12"、 "notasecret"、X509KeyStorageFlags.Exportable); 同じエラーが発生しました: パスをたとえば "C:\ tamp \ key.p12"に変更すると、別のエラーメッセージが表示されます: 'System.Security.Cryptography.CryptographicException'タイプの最初の機会例外が発生しましたmscorlib.dll 追加情報:Detector reattasökvägen。 (翻訳: "パスが見つかりません") – JoBe

+0

私はまだそれを動作させることができません。何らかのバージョンの不一致がありますか? また、あなたの答えで提供したリンクはAssertionFlowClientを使用していますが、私の質問で述べたように、もうサポートされていないという警告が表示されます。何か不足していますか? – JoBe

+0

申し訳ありません、このリンクを試す - https://code.google.com/p/google-api-dotnet-client/source/browse/Plus.ServiceAccount/?repo=samples READMEファイルに従って、このサンプルが期待通りに機能することを確認できますか?そして、確認するだけで、Google APIコンソールからダウンロードしたファイルをこの場所(C:\ Temp \ key.p12)にコピーしましたか? – peleyal

関連する問題