【问题标题】:Using Firebase in Expo (React Native) app在 Expo (React Native) 应用程序中使用 Firebase
【发布时间】:2020-06-08 17:00:15
【问题描述】:

我正在考虑将 Firebase 用于我的新移动应用,它是一个 Expo 应用。 Expo 的团队为此做了一个很好的教程 (https://docs.expo.io/versions/latest/guides/using-firebase/)。

阅读本教程,我可以看到推荐的方式是将 API 凭据(密钥、项目 ID 等)直接放在应用程序中并以这种方式初始化客户端:

import * as firebase from 'firebase';

// Initialize Firebase
const firebaseConfig = {
  apiKey: "<YOUR-API-KEY>",
  authDomain: "<YOUR-AUTH-DOMAIN>",
  databaseURL: "<YOUR-DATABASE-URL>",
  storageBucket: "<YOUR-STORAGE-BUCKET>"
};

firebase.initializeApp(firebaseConfig);

问题:将 API 密钥放入 RN (Expo) 项目中是否安全?

【问题讨论】:

    标签: react-native expo api-key


    【解决方案1】:

    我也在使用 firebase,以及许多其他需要 API KEY 的第三方 sdk。我通过将它存储在后端来完成它,当应用程序被初始化(即安装)时,我调用一个 API 到后端,它提供所有 API 密钥,并将它们存储在相应的异步存储中,以便每当我需要那个特定的 API 密钥,我只是做 AsyncStorage.getItem('API_Key') ,它既安全又无法跟踪,因为它来自后端。显然在后端你想将它们存储为环境变量。所以我建议你遵循这一点。

    在你的情况下,就这样做

    let firebaseApiKey = AsyncStorage.getItem('firebaseKey');
    
    // Initialize Firebase
    const firebaseConfig = {
      apiKey: firebaseApiKey,
      authDomain: "<YOUR-AUTH-DOMAIN>",
      databaseURL: "<YOUR-DATABASE-URL>",
      storageBucket: "<YOUR-STORAGE-BUCKET>"
    };
    
    firebase.initializeApp(firebaseConfig);
    

    【讨论】:

    • 在 AsyncStorage 中存储敏感数据是否安全,这基本上意味着您将 API 密钥存储到每个用户的设备中?这些用户肯定可以读取您的 API 密钥 (stackoverflow.com/questions/39148714/…)。但是,我的问题是“将 API 密钥直接放入 RN 代码是否安全?”不幸的是,这不是答案。
    【解决方案2】:

    我建议您使用 Visual Studio App Center 之类的服务来定义您的环境变量,然后在您的代码中引用这些变量。在构建过程中,VS App Center 将适合您在代码中使用它的位置的值。

    因此,敏感值甚至永远不会触及您的代码库。这是我能想到的最安全的解决方案。

    【讨论】:

    • 这是一个解决方案。但是当 VSAC 构建和编译应用程序时,它确实会在应用程序包中注入密钥,所以我猜聪明的人可以阅读它。
    猜你喜欢
    • 1970-01-01
    • 2019-02-23
    • 2022-07-21
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多