【问题标题】:How do you save API keys without exposing them in the first place?如何在不暴露 API 密钥的情况下保存它们?
【发布时间】:2021-07-20 04:41:35
【问题描述】:

如果我将 API 密钥保存到 Flutter_secure_storage,它们必须首先公开。如何在不暴露它们的情况下对其进行预加密或保存到安全存储?

我想在安全存储密钥的地方增加一层安全性,只有在进行 API 调用时才会公开。但是,如果我对密钥进行了硬编码,那么即使仅在初始应用程序运行时它们也会暴露出来。你如何绕过这个逻辑?

【问题讨论】:

    标签: flutter security api-key


    【解决方案1】:

    如果这是一个 web 项目,你可以在两端使用类似 base64 的东西,然后像这样 debase 并保存:

    PHP 上的服务器

    apiKeyEncoded = base64_encode(apiKeyGenerator());
    

    客户:

    apiKeyEncoded = await getApiKey();
    apiKeyDecoded = base64Decode(apiKeyEncoded).toString(); //this is the usable one, save it.
    

    现在,如果该项目专注于移动使用,我认为您实际上不需要实现它,代码会相同。

    【讨论】:

    • 方便的方法,再次根据我上面的评论,你如何在没有密钥的情况下调用后端?我真的很感激这方面的任何帮助,因为我对处理任何服务器都很陌生:)
    • 假设您使用具有过期时间的动态密钥,首先您会调用服务器请求密钥,它应该以 base64 编码的密钥响应。然后你解码它并保存到设备中。现在,如果您的密钥是静态的(始终相同),那么您可以关注 Mohit Singh's advice
    【解决方案2】:

    为避免暴露 API 密钥,您应该将密钥存储在“.env”文件中,并在进行 API 调用时使用flutter_dotenv 包访问它。虽然这种方法在进行 API 调用时无济于事。如果您真的想保护公开密钥的安全,您应该将 API 调用移至后端,这样客户端就无法看到这些网络调用。

    【讨论】:

    • 很高兴知道,我会检查那个包。我同意后端是最好的。您是否有任何用于生成 API 调用到后端的教程或资源?我是处理服务器的新手,所以这有点令人困惑。我认为您需要 API 密钥才能对您的后端进行任何调用???
    • 后端,我的意思是创建自己的后端,而不是使用 firebase 或任何其他服务。要创建自己的后端,您首先必须为后端选择一种语言,最好的选择是 javascript,因为该语言类似于 dart,并且您会找到很多资源。您可以观看此youtube.com/watch?v=uk-iRSj1Ldg 以获得基本了解。如果您使用的是 Firebase,只要您设置了安全规则以限制未经授权的访问,公开 API 密钥就没有什么坏处。
    • 我会看那个视频,很好的起点。所以我认为 Parse 也是如此?如果我使用 ACL 和 CLP 限制访问,公开 API 密钥是否安全?
    • 是的。 Firebase 密钥可以安全地公开,因为它们仅用于识别项目stackoverflow.com/questions/37482366/…。但是,并非所有 API 密钥都是如此。
    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 2019-07-13
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2016-12-10
    相关资源
    最近更新 更多