我在Dialogflow代理中将实现API的.NET Web API项目作为我们的Webhook。在控制器的Post方法中,从Dialogflow收到请求后,我实现了显式身份验证,如C#的Google Cloud文档中所示。
//jsonFileName is the name of the serviceAccountKey json generated from the Google Cloud Platform that's encrypted internally
public bool AuthExplicit(string projectId, string jsonFileName)
{
try
{
string JsonCredential = DecryptHelper.Decrypt(jsonFileName);
var credential = GoogleCredential.FromJson(JsonCredential).CreateScoped(LanguageServiceClient.DefaultScopes);
var channel = new Grpc.Core.Channel(
LanguageServiceClient.DefaultEndpoint.ToString(),
credential.ToChannelCredentials());
var client = LanguageServiceClient.Create(channel);
AnalyzeSentiment(client);
if (client != null)
{
return true;
}
else
{
return false;
}
}
internal void AnalyzeSentiment(LanguageServiceClient client)
{
var response = client.AnalyzeSentiment(new Document()
{
Content = "Authenticated.",
Type = Document.Types.Type.PlainText
});
var sentiment = response.DocumentSentiment;
string score = $"Score: {sentiment.Score}";
string magnitude = $"Magnitude: {sentiment.Magnitude}";
}
与代码的区别在于,获取客户端后,当我们调用AnalyzeSentiment()方法时,它不会执行任何操作,并且projectId参数从不用于身份验证。 GCP文档非常令人困惑,因为当有一个使用projectId的AuthExplicit()时,它将它用作存储桶的参数,并且仅在控制台上打印出来。
工作正常,直到我们与其他代理测试服务帐户密钥为止。预期的输出是身份验证将失败,但是仍然可以通过。
一旦Post方法通过AuthExplicit()方法,它将仅返回一个布尔值。这是正确的身份验证方法吗?还是还有其他需要调用的东西?
答案 0 :(得分:0)
与代码的区别在于,获取客户端后,当我们调用AnalyzeSentiment()方法时,它什么也没做
client.AnalyzeSentiment()
是否返回空响应?通话会永远挂吗?
工作正常,直到我们与其他代理测试服务帐户密钥为止。
什么是其他代理?一个不同的User-Agent标头?
一旦Post方法通过AuthExplicit()方法,它将仅返回一个布尔值。这是正确的身份验证方法吗?还是还有其他需要调用的东西?
“发布方法”指的是什么?只会返回布尔值的“ it”是什么?