C# 如何验证Dialogflow集成的Google凭据

C# 如何验证Dialogflow集成的Google凭据,c#,google-cloud-platform,dialogflow-es,google-authentication,C#,Google Cloud Platform,Dialogflow Es,Google Authentication,我想将我的C系统与Google Dialogflow集成。 所以我试着使用Jon先生在这里给我看的代码: 但我遇到了这个问题: 应用程序默认凭据不可用。他们是 如果在Google计算引擎中运行,则可用。否则 必须定义环境变量GOOGLE\u应用程序\u凭据 指向定义凭据的文件。看见 了解更多信息 我已经下载了Dialogflow项目服务帐户密钥JSON文件。 我正在尝试使用此代码进行身份验证: // Some APIs, like Storage, accept a credential in

我想将我的C系统与Google Dialogflow集成。 所以我试着使用Jon先生在这里给我看的代码:

但我遇到了这个问题:

应用程序默认凭据不可用。他们是 如果在Google计算引擎中运行,则可用。否则 必须定义环境变量GOOGLE\u应用程序\u凭据 指向定义凭据的文件。看见 了解更多信息

我已经下载了Dialogflow项目服务帐户密钥JSON文件。 我正在尝试使用此代码进行身份验证:

// Some APIs, like Storage, accept a credential in their Create() method.
// Explicitly use service account credentials by specifying the private key file.
GoogleCredential credential = GoogleCredential.FromFile(theServiceAccountJSONFilePath);
StorageClient storage = StorageClient.Create(credential);
// Make an authenticated API request.
PagedEnumerable<Buckets, Bucket> buckets = storage.ListBuckets(theProjectID);
foreach (Bucket bucket in buckets)
{
    Console.WriteLine(bucket.Name);
}
return null;
我从这个链接得到了代码:

问题是代码对我来说遇到了这个问题:

对话流-ixksso@maintest-vskxxy.iam.gserviceaccount.com没有 拥有项目160007643358的storage.Bucket.list访问权限

我在我的“谷歌云平台”上使用免费选项。也许免费选项不允许以这种方式进行身份验证


我在这方面没有太多经验,因此任何建议都将不胜感激。

如评论中所述,在大多数情况下,最简单的方法是指定GOOGLE_APPLICATION_CREDENTIALS环境变量以引用JSON文件

如果需要以其他方式加载凭据,可以使用客户端生成器非常灵活地指定凭据:

从一个抽象的 从路径到JSON文件 从JSON中,您已经拥有了一个字符串
您需要进入并为该服务帐户指定相关角色,例如存储对象查看器。看看这是否有帮助-我现在无法提供更多详细信息,但如果您在尝试后留下评论,我将稍后检查。@JonSkeet我已将“存储管理员”角色添加到我的服务帐户中;现在认证代码可以100%工作,但是在var client=agentclient.Create;我还是有问题。如何将“GoogleCredential”传递给该“AgentClient”?最简单的选择是使用GOOGLE_APPLICATION_CREDENTIALS环境变量,这样您根本不需要加载凭据。如果您确实需要动态加载它,那么您可以使用var client=new agentclientbuilder{TokenAccessMethod=credential.GetAccessTokenForRequestAsync}.Build-有关详细信息,请参阅。@jonsket我想我已经找到了解决方案。我的“代理客户端”现在似乎正在“创建”。但是从那以后我又遇到了一个新问题。这正成为一场真正的斗争。
ICredential credential = LoadCredentialFromSomewhere();
var client = new AgentsClientBuilder
{
    TokenAccessMethod = credential.GetAccessTokenForRequestAsync 
}.Build();
var client = new AgentsClientBuilder
{
    CredentialsPath = "/path/to/serviceaccount.json"
}.Build();
string json = LoadJsonFromSomewhere();
var client = new AgentsClientBuilder
{
    JsonCredentials = json
}.Build();