このAPIドキュメントを参照して、バックエンドnodeJSサーバーを使用してIoT-Coreのデバイス構成にアクセス(および編集)しようとしています
ただし、エラーが発生し続けます:
コード 401 とエラー メッセージ「メッセージ」: 「リクエストに無効な認証資格情報が含まれていました。OAuth 2 アクセス トークン、ログイン Cookie、またはその他の有効な認証資格情報が必要でした。https://developers.google.com/identity/sign-in/web/devconsoleを参照してください。 -プロジェクト。」、「ステータス」:「認証されていません」。
からサービス アカウントとキーを作成し、Google IAM
クラウド IoT デバイス コントローラーのアクセス許可を付与しました。このアクセス許可は、デバイス構成を更新できますが、作成または削除はできません。その後、それを Cloud IoT Admin に変更し、さらに に変更しました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);
})
});