我正在使用Google DialogFlow Api V2,我发现它在某种程度上混淆了如何正确处理身份验证过程。
我已经将服务帐户密钥创建为json文件,然后运行以下命令:
gcloud auth activate-service-account --key-file="credentials.json"
说它已经激活然后我运行gcloud auth print-access-token
会打印出访问令牌,这个令牌我可以使用下面的代码传递到Header中:
fetch(configs.baseUrl + "query?v=20150910", {
body: JSON.stringify({
queryInput: {
text: {
text: "Hello",
languageCode: "en-US"
}
}}),
headers: {
'content-type': 'application/json',
"Authorization": "Bearer xxxx",
},
method: 'POST',
})
.then(response => response.json())
.then(data => {
console.log(data.result);
})
.catch(error => console.error(error))
在令牌到期之前,这将在1小时内正常工作,问题是我如何重新生成新令牌,因为我已经拥有 service-account-key-file.json 我能以某种方式从此信息重新生成访问令牌?
使用此客户端库https://github.com/dialogflow/dialogflow-nodejs-client-v2效果很好我不需要对访问令牌做任何事情但问题是我不想使用Node.js
是否有可能让我每次只使用javascript和我生成的service-account-key-file.json过期时设法获取访问令牌。
我很感激代码示例!
答案 0 :(得分:0)
鉴于设置正确的身份验证过程的安全性,建议尽可能使用客户端库,例如NodeJS库。
但是,如果您想自己实施此过程,可以查看this guide,其中介绍了如何为Web服务器应用程序设置OAuth 2.0。步骤如下,您可以在指南中找到HTTP / REST请求和响应示例:
创建授权凭证。
标识访问范围:根据DialgoFlow API documentation,您的应用程序需要访问的资源所需的访问范围为:
https://www.googleapis.com/auth/cloud-platform
创建授权请求
手动授予对您的应用程序的访问权限(仅一次)。
获取刷新和访问令牌。
使用refresh token获取过期的新访问令牌。
答案 1 :(得分:0)
您可以使用以下方法生成令牌
import { dialogflowConfig } from './config/dialogflowConfig';
import { TokenCache } from 'google-oauth-jwt';
function generateAccessToken() {
return new Promise((resolve, reject) => {
const tokens = new TokenCache();
tokens.get({
// client_email from .json file
email: dialogflowConfig.client_email,
// private key from .json file
key: dialogflowConfig.private_key,
// you can put scope ['https://www.googleapis.com/auth/cloud-platform']
scopes: dialogflowConfig.scopes
}, function (err, token) {
if(err){
reject(err);
}
resolve(token);
});
});
}