在 python 中安全部署客户端机密

Secure deployment of client secrets in python

我打算使用 PythonSpotify 编写一个 Kodi (former XBMC) 插件。前段时间,Spotify 弃用了他们的旧库 libspotify 并引入了一个新的基于 ReSTWebAPI。我想使用这个 api 从 Spotify 请求播放列表、关注的专辑和其他用户特定内容等数据。此 WebAPI 使用 OAUTH 机制授权应用程序使用用户特定数据。 因此,我需要一个 Client ID 和一个 Client Secret。虽然 Client ID 是 public,但我将其存储在源代码中没有问题。但是 Client Secret 呢?应用程序需要这个秘密才能在 spotify 上验证自己。因此,它也需要部署。

我如何安全地部署这个秘密,这样插件的用户就无法读出秘密?

我不能使用混淆技术,因为 python 是被解释的,用户可以简单地启动一个解释器,导入我的模块并读出重构的秘密。这同样适用于加密密钥。该应用程序需要能够解密秘密,因此,我也需要部署加密密钥。这是先有鸡还是先有蛋的问题。

对此有什么建议吗?其他软件如何解决这个问题?

编辑:我刚找到这个 RFC6819。似乎这是 oauth.

中的普遍问题

在这种情况下,您可以使用 Implicit Grant Flow,它是为客户端应用程序设计的,出于安全原因,在这些应用程序中存储秘密是不切实际的。