1

アカウントでGoogle Datastoreにサービスアカウントの認証情報ファイル(ドキュメントに従って作成したもの)を使用しようとしていますが、認証エラーが発生しましたGoogle Datastore認証の問題 - C#

Grpc.Core.RpcException:エンティティを挿入ステータス(のStatusCode =非認証、 詳細= "例外はプラグインメタデータの認証情報に発生した")

は私のコードは次のとおりです。

var db = DatastoreDb.Create("myprojectid"); 
Entity entity = new Entity{ 
Key = db.CreateKeyFactory("mykindname").CreateIncompleteKey() 
}; 
var keys = await db.InsertAsync(new[] { entity }); 

変数は、資格情報を参照するGOOGLE_APPLICATION_CREDENTIALSは、ファイルと証明書がオブジェクトかどうかを確認するために()GoogleCredential.GetApplicationDefaultAsyncを呼び出すことが有効であるとき、それは確かによさそうだ...

私はGetApplicationDefaultAsyncを使用し、いくつかの以前の例を見てGoogle.Cloud.Datastore.V1

: - いくつかのDatastoreServiceオブジェクトと関数togehetherは、最新の.NET APIではなく、私はDatastoreServiceオブジェクトを見つけることができませんでした(おそらくそれは...旧バージョンにありました)通知私はを持っていません他の認証方法を使いたい:

1)gcloud cliを使う。

2)Google環境(例:アプリエンジン)から実行しています。

これを解決する方法はありますか?

+0

"license"を "credentials"に置き換えました。 –

+0

ありがとうございます。私のローカル環境から... –

+0

このエラーは[gRPC]から来ているようです(https: //github.com/grpc/grpc/blob/master/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs)。元の例外を表示するためにgRPCログを有効にすることはできますか?それは失敗した 'InsertAsync'メソッドですか –

答えて

2

Jon Skeetの大きな助けを得て、問題は解決されました。

必要なすべてのDatastore DLLを参照しないと、認証の問題が発生することがあります。すべてのdllが、データストアへの呼び出しを実行しているプロジェクトで参照されていることを確認します。

私はテストプロジェクトにNuGet経由でGoogle Datastoreのライブラリを追加しました。

gRPCロギングを有効にすることをお勧めします。 (例:GrpcEnvironment.SetLogger(new ConsoleLogger())では、いくつかのDLLをロードする際に問題が発生したかどうかを確認できます。

+0

あなたはNuGet経由でそれを追加していなかったら、あなたは以前どのようにライブラリを参照していましたか? –

+0

私はライブラリプロジェクトにNuGet経由で追加しましたが、私のテストプロジェクトには追加していません...テストプロジェクトは、Google Datastore DLLを参照せずにライブラリプロジェクトを参照しました... –

+0

Hmm。私はそれが動作することを期待していましたが、おそらく*正確な*詳細(ターゲットフレームワークなど)に依存します。過渡的な依存関係はちょうどうまくいかなければなりません。(彼らはナゲットの前にはうまくいかなかったが、ナゲットであれば大丈夫だと願っています) –