Nar*_*esh 5 firebase-tools firebase-authentication google-cloud-functions
我的 firebase 云函数包含受保护的路由,只有在请求标头中传递有效的 IdToken 时才能访问这些路由。云函数 API 看起来像这样
functions/index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: "DB_URL"
});
const express = require('express');
const app = express();
const authenticate = async (req, res, next) => {
if (!req.headers.authorization || !req.headers.authorization.startsWith('Bearer ')) {
res.status(403).send('Unauthorized');
return;
}
const idToken = req.headers.authorization.split('Bearer ')[1];
try {
const decodedIdToken = await admin.auth().verifyIdToken(idToken);
req.user = decodedIdToken;
next();
return;
} catch(e) {
res.status(403).send('Unauthorized');
return;
}
};
app.use(authenticate);
app.get('/protected', async (req, res) => {
return res.send('OK');
});
exports.api = functions.https.onRequest(app);
Run Code Online (Sandbox Code Playgroud)
最初,我使用 Firebase 身份验证来创建新用户并获取 IdToken
curl 'https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=[API_KEY]' \
-H 'Content-Type: application/json' \
--data-binary '{"email":"[user@example.com]","password":"[PASSWORD]","returnSecureToken":true}'
Run Code Online (Sandbox Code Playgroud)
获取 IdToken,以便我可以将其传递给 firebase 云函数来访问受保护的路由
curl 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=[API_KEY]' \
-H 'Content-Type: application/json' \
--data-binary '{"email":"[user@example.com]","password":"[PASSWORD]","returnSecureToken":true}'
Run Code Online (Sandbox Code Playgroud)
使用这种方法调用我的受保护的云函数运行良好
curl --location --request GET 'http://localhost:5001/abc-production/us-central1/api/protected/' \
--header 'Authorization: Bearer SECRET_ID_TOKEN'
Run Code Online (Sandbox Code Playgroud)
现在,我不想使用 Firebase 身份验证,而是使用身份验证模拟器来创建新用户并生成 IdToken。
我可以使用 Auth 模拟器 UI 创建新用户,但如何生成这些用户的访问令牌?是否有任何 API 端点可以返回本地保存的用户的 IdToken,以便我可以测试受保护的 API,而无需在生产中添加用户?
另外,当我运行身份验证模拟器时,使用生产 Firebase 身份验证环境生成的 IdToken 不起作用。
"code": "auth/argument-error",
"message": "Firebase ID token has invalid signature. See https://firebase.google.com/docs/auth/admin/verify-id-tokens for details on how to retrieve an ID token."
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3752 次 |
| 最近记录: |