Ich versuche einen Backend-NodeJS-Server für den Zugriff (und Bearbeitung) der Gerätekonfiguration auf IoT-Core zu verwenden, siehe API-Dokumentation: https://cloud.google.com/iot/docs/reference/rest/v1/projects.locations.registries.devices/get.Authentifizierungsfehler beim Abrufen und Bearbeiten der Gerätekonfiguration auf dem IoT-Core
Aber ich erhalte immer Fehlercode 401 mit der Fehlermeldung "message": "Request ungültig Authentifizierungsinformationen hatte Expected OAuth 2 Zugriffstoken, Login-Cookie oder anderen gültigen Authentifizierungsnachweis https://developers.google.com/identity/sign-in/web/devconsole-project See...", "Status": "UNBEABSICHTIGT".
Ich erstellte ein Dienstkonto und einen Schlüssel von Google IAM und gab ihm Cloud IoT Device Controller-Berechtigungen, die Gerätekonfigurationen aktualisieren, aber nicht erstellen oder löschen können. Anschließend änderte ich es zu Cloud IoT Admin und sogar Project Editor Berechtigungen, sah aber immer noch die gleiche Fehlermeldung. Bekomme ich die Schlüssel falsch oder mache ich nicht etwas anderes, was ich tun sollte?
-Code unten war, wie ich die Anfrage aufgerufen
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);
})
});
Korrigieren. Entschuldigung, aus der Beschreibung Ihrer Frage ging ich davon aus, dass Sie versucht haben, ein Gerät mit dem IoT Core zu verbinden und vom Gerät aus zu kommunizieren. Nicht, dass Sie das Gerät ändern wollten (ich weiß, dass Sie modify config sagten, aber dann kam der Code von den clientseitigen oder Geräteverbindungs-Samples), also habe ich erraten, was Sie meinten. :) Tut mir leid, dass ich dich zum falschen gelenkt habe! – GabeWeiss