Nachdem ich weiter gegangen bin und einen Hinweis aus der @ ricka-Antwort genommen habe, habe ich beschlossen, eine Authentifizierungsprüfung für meine Cloud-Funktionen mit einem JWT-Token in Form eines Berechtigungs-Header-Zugriffstokens durchzuführen.
Hier ist die Implementierung in Knoten:
const client = jwksClient({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: "https://<auth0-account>.auth0.com/.well-known/jwks.json"
});
function verifyToken(token, cb) {
let decodedToken;
try {
decodedToken = jwt.decode(token, {complete: true});
} catch (e) {
console.error(e);
cb(e);
return;
}
client.getSigningKey(decodedToken.header.kid, function (err, key) {
if (err) {
console.error(err);
cb(err);
return;
}
const signingKey = key.publicKey || key.rsaPublicKey;
jwt.verify(token, signingKey, function (err, decoded) {
if (err) {
console.error(err);
cb(err);
return
}
console.log(decoded);
cb(null, decoded);
});
});
}
function checkAuth (fn) {
return function (req, res) {
if (!req.headers || !req.headers.authorization) {
res.status(401).send('No authorization token found.');
return;
}
const parts = req.headers.authorization.split(' ');
if (parts.length != 2) {
res.status(401).send('Bad credential format.');
return;
}
const scheme = parts[0];
const credentials = parts[1];
if (!/^Bearer$/i.test(scheme)) {
res.status(401).send('Bad credential format.');
return;
}
verifyToken(credentials, function (err) {
if (err) {
res.status(401).send('Invalid token');
return;
}
fn(req, res);
});
};
}
I jsonwebtoken
verwenden, um die JWT-Token, um zu überprüfen, und jwks-rsa
den öffentlichen Schlüssel abzurufen. Ich benutze Aut0, also jwks-rsa
greift auf die Liste der öffentlichen Schlüssel, um sie abzurufen.
Die checkAuth
Funktion kann dann die Cloud-Funktion zur Sicherung verwendet werden, wie:
exports.get = checkAuth(function (req, res) {
// do things safely here
});
Sie diese Änderung
Der JWT/Zugriffstoken in einem abgerufen werden kann https://github.com/tnguyen14/functions-datastore/commit/a6b32704f0b0a50cd719df8c1239f993ef74dab6 auf meinem GitHub Repo sehen Anzahl der Weg. Für Auth0 kann die API doc bei https://auth0.com/docs/api/authentication#authorize-client
gefunden werden Sobald diese vorhanden ist, können Sie die Cloud-Funktion auslösen mit so etwas wie
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer access-token" \
-d '{"foo": "bar"}' \
"https://<cloud-function-endpoint>.cloudfunctions.net/get"
Ich habe die gleiche Frage! –
Ich habe das gleiche Problem! – Neurus
Ich hatte auch die gleichen Zweifel. AWS API Gateway hat ein Konzept von API-Schlüssel.Gibt es etwas ähnliches in GCP? – unnik