別のユーザーの代理として動作するサービスアカウントを使用して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"、説明: ""、ウリ: ""
申し訳ありませんが、パスがチェックされ、すべての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
私はまだそれを動作させることができません。何らかのバージョンの不一致がありますか? また、あなたの答えで提供したリンクはAssertionFlowClientを使用していますが、私の質問で述べたように、もうサポートされていないという警告が表示されます。何か不足していますか? – JoBe
申し訳ありません、このリンクを試す - https://code.google.com/p/google-api-dotnet-client/source/browse/Plus.ServiceAccount/?repo=samples READMEファイルに従って、このサンプルが期待通りに機能することを確認できますか?そして、確認するだけで、Google APIコンソールからダウンロードしたファイルをこの場所(C:\ Temp \ key.p12)にコピーしましたか? – peleyal