我正在尝试使用后端 nodeJS 服务器访问(和编辑)IoT-Core 上的设备配置,参考此API 文档
但是,我不断收到错误:
带有错误消息“消息”的代码 401:“请求具有无效的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据。请参阅https://developers.google.com/identity/sign-in/web/devconsole -项目。”,“状态”:“未经身份验证”。
我从 中创建了一个服务帐户和一个密钥Google IAM
,并为其授予了 Cloud IoT Device Controller 权限,该权限可以更新设备配置,但不能创建或删除。随后,我将其更改为 Cloud IoT Admin 和 even Project Editor permissions
,但仍然看到相同的错误消息。我是把钥匙弄错了,还是没有做我应该做的其他事情?
下面的代码是我调用请求的方式
function createJwt (projectId, privateKeyFile, algorithm) {
// Create a JWT to authenticate this device. The device will be disconnected
// after the token expires, and will have to reconnect with a new token. The
// audience field should always be set to the GCP project ID.
const token = {
'iat': parseInt(Date.now() / 1000),
'exp': parseInt(Date.now() / 1000) + 20 * 60, // 20 minutes
'aud': projectId
};
const privateKey = fs.readFileSync(privateKeyFile);
return jwt.sign(token, privateKey, { algorithm: algorithm });
}
app.get('/', function(req, res){
let authToken = createJwt('test-project', './keys/device-config.pem', 'RS256');
const options = {
url: 'https://cloudiot.googleapis.com/v1/projects/test-project/locations/us-central1/registries/dev-registry/devices/test-device',
headers: {
'authorization': 'Bearer ' + authToken,
'content-type': 'application/json',
'cache-control': 'no-cache'
},
json: true
}
request.get(options, function(error, response){
if(error) res.json(error);
else res.json(response);
})
});