在云运行容器中使用Firebase Admin Auth
我在运行graphql服务器的云运行中使用Firebase admin auth作为身份验证和授权机制(客户端发送令牌,服务器将验证和检查自定义声明中包含的用户角色)。admin auth模块在尝试调用verifyIdToken时将抛出错误。不过,从云函数调用admin auth方法可以完美地工作 FirebaseAuthError:必须使用证书凭据初始化应用程序,或将Firebase项目ID设置为GOOGLE_CLOUD_项目环境变量以调用verifyIdToken() 我曾尝试使用app engine服务帐户(与云功能使用的帐户相同),并使用firebase admin角色创建了一个新帐户作为我的云运行服务帐户,但没有成功。我可以通过在Dockerfile中提供凭证文件(从firebase控制台生成)并设置env变量GOOGLE_APPLICATION_credentials来运行它,但我想把它作为最后的手段,除了它非常难看之外 下面是我的Apollo服务器的上下文函数在云运行容器中使用Firebase Admin Auth,firebase,firebase-authentication,firebase-admin,google-cloud-run,Firebase,Firebase Authentication,Firebase Admin,Google Cloud Run,我在运行graphql服务器的云运行中使用Firebase admin auth作为身份验证和授权机制(客户端发送令牌,服务器将验证和检查自定义声明中包含的用户角色)。admin auth模块在尝试调用verifyIdToken时将抛出错误。不过,从云函数调用admin auth方法可以完美地工作 FirebaseAuthError:必须使用证书凭据初始化应用程序,或将Firebase项目ID设置为GOOGLE_CLOUD_项目环境变量以调用verifyIdToken() 我曾尝试使用app e
import { Context, ContextFunction } from 'apollo-server-core';
import { ExpressContext } from 'apollo-server-express/dist/ApolloServer';
import { firebase } from '../config';
import { batchLoaders } from './batchLoaders';
export const context: ContextFunction<ExpressContext, Context> = async ({
req
}) => {
const token = req.headers.authorization || '';
const defaultContext = { batchLoaders };
if (token.length === 0) return defaultContext;
try {
const { uid } = await firebase.auth.verifyIdToken(token);
const user = await firebase.auth.getUser(uid);
return { uid, claims: user.customClaims, ...defaultContext };
} catch (err) {
console.error(err);
return defaultContext;
}
};
难道不是同一个服务帐户应该能够访问管理员身份验证资源吗?糟糕,错误消息说明了一切,我需要在CLOUD run env vars中提供GOOGLE_CLOUD_项目。在CLOUD run中添加GOOGLE_CLOUD_项目作为环境变量也解决了我的问题。我可以吻你。我花了一整天找这个。问题是我没有提到任何关于
GOOGLE\u CLOUD\u项目
环境变量的错误。我刚刚得到必须使用项目ID初始化FirebaseApp才能调用verifyIdToken()
。尽管如此,在CLOUD run中添加GoogleCloud\u项目作为环境变量解决了这个问题。
const firebaseApp = initializeApp();
const auth = firebaseApp.auth();
const firestore = firebaseApp.firestore();
export const firebase = {
auth,
firestore,
refs: {
events: firestore.collection('_events'),
versions: firestore.collection('_versions')
}
};