ASP.NET应用如何为Firestore配置非默认Google凭证?
问题原因
无参的FirestoreDb.Create()方法走Google Cloud默认凭证查找链,会依次查找环境变量配置的凭证文件、运行环境默认服务账号路径等,不会读取你手动创建的FirebaseApp实例的凭证,因此会触发调用失败。
解决方案
不需要将凭证存为文件,也不需要配置GOOGLE_APPLICATION_CREDENTIALS环境变量,使用FirestoreDbBuilder直接传入GoogleCredential实例即可实现凭证的直接注入。
代码示例1:直接通过凭证JSON创建FirestoreDb实例
// 从环境变量读取凭证JSON字符串,不要硬编码到代码中 string credentialJson = Environment.GetEnvironmentVariable("你的凭证环境变量名"); GoogleCredential googleCredential = GoogleCredential.FromJson(credentialJson); // 构造FirestoreDb实例 FirestoreDb db = new FirestoreDbBuilder { ProjectId = "你的Firebase项目ID", Credential = googleCredential }.Build();
代码示例2:搭配你已有的FirebaseApp注册逻辑,实现DI注入
// 注册FirebaseApp builder.Services.AddSingleton<FirebaseApp>((provider) => { string credentialJson = Environment.GetEnvironmentVariable("你的凭证环境变量名"); return FirebaseApp.Create(new AppOptions() { Credential = GoogleCredential.FromJson(credentialJson) }); }); // 注册FirestoreDb单例,复用FirebaseApp的凭证 builder.Services.AddSingleton<FirestoreDb>((provider) => { var firebaseApp = provider.GetRequiredService<FirebaseApp>(); var credential = firebaseApp.Options.Credential as GoogleCredential; return new FirestoreDbBuilder { ProjectId = "你的Firebase项目ID", Credential = credential }.Build(); }); // 后续业务代码中直接注入FirestoreDb即可使用
部署适配
你可以直接将完整的凭证JSON字符串配置到DigitalOcean App Platform的应用环境变量中,不需要将凭证打包进Docker镜像,也不需要在运行环境存储任何文件,完全符合你当前的部署约束。
内容的提问来源于stack exchange,提问作者AntonIva
相关产品推荐
相关产品推荐

