我正在构建一个使用Google的YouTube Data API v3的Electron应用程序。 为了访问API,我决定使用标准API密钥(而不是OAuth,因为我不会访问任何个人数据)。
但问题是,我无法在我的应用程序中隐藏API密钥,而且我也无法使用referrer限制(referrer限制允许您过滤哪些网站可以使用您的API密钥(通过HTTP地址)),因为这是一个电子应用程序。所以基本上,如果有人查看源代码(甚至仅仅是开发人员工具),他们就可以看到密钥,并自由使用它。
有关该怎么做的任何建议?感谢。
答案 0 :(得分:4)
为不需要用户注册或登录的应用程序保护API密钥的唯一方法是将其放在服务器代理之后。因此,当他们启动应用程序时,应用程序会联系到您的服务器,然后服务器返回API密钥,因此它仅以动态形式驻留在应用程序中,用户永远不会看到它。
但是,如果他们使用数据包嗅探器或本地代理,他们可以获取令牌,这仍然是不安全的。
最安全的方法是从您的应用有权访问的私人服务器发出所有API请求。因此,应用程序不向Youtube发出请求,它只从您的服务器获取数据。
然后,您可以通过使用私钥对私有服务器的API请求进行签名来保护您的应用。例如,您可以在应用程序中使用在每个API请求的标头中发送的私钥的配置文件。然后,他们只获取密钥的方法是反编译您的应用程序,然后访问该配置文件,然后使用相同的私人信息向您的私人服务器发出API请求。然后,为了防止恶意用户,您可以监控流量并设置请求限制,例如每个应用每秒1个请求。超过该限制的任何应用程序都可能被列为DDOS攻击或恶意用户。
数据流看起来像这样。
App -> Server (with Api Key) -> youtube (data) -> Server (data) -> App