在 python 中安全部署客户端机密
Secure deployment of client secrets in python
我打算使用 Python
为 Spotify
编写一个 Kodi (former XBMC)
插件。前段时间,Spotify 弃用了他们的旧库 libspotify
并引入了一个新的基于 ReST
的 WebAPI
。我想使用这个 api 从 Spotify 请求播放列表、关注的专辑和其他用户特定内容等数据。此 WebAPI
使用 OAUTH
机制授权应用程序使用用户特定数据。
因此,我需要一个 Client ID
和一个 Client Secret
。虽然 Client ID
是 public,但我将其存储在源代码中没有问题。但是 Client Secret
呢?应用程序需要这个秘密才能在 spotify 上验证自己。因此,它也需要部署。
我如何安全地部署这个秘密,这样插件的用户就无法读出秘密?
我不能使用混淆技术,因为 python 是被解释的,用户可以简单地启动一个解释器,导入我的模块并读出重构的秘密。这同样适用于加密密钥。该应用程序需要能够解密秘密,因此,我也需要部署加密密钥。这是先有鸡还是先有蛋的问题。
对此有什么建议吗?其他软件如何解决这个问题?
编辑:我刚找到这个 RFC6819。似乎这是 oauth
.
中的普遍问题
在这种情况下,您可以使用 Implicit Grant Flow,它是为客户端应用程序设计的,出于安全原因,在这些应用程序中存储秘密是不切实际的。
我打算使用 Python
为 Spotify
编写一个 Kodi (former XBMC)
插件。前段时间,Spotify 弃用了他们的旧库 libspotify
并引入了一个新的基于 ReST
的 WebAPI
。我想使用这个 api 从 Spotify 请求播放列表、关注的专辑和其他用户特定内容等数据。此 WebAPI
使用 OAUTH
机制授权应用程序使用用户特定数据。
因此,我需要一个 Client ID
和一个 Client Secret
。虽然 Client ID
是 public,但我将其存储在源代码中没有问题。但是 Client Secret
呢?应用程序需要这个秘密才能在 spotify 上验证自己。因此,它也需要部署。
我如何安全地部署这个秘密,这样插件的用户就无法读出秘密?
我不能使用混淆技术,因为 python 是被解释的,用户可以简单地启动一个解释器,导入我的模块并读出重构的秘密。这同样适用于加密密钥。该应用程序需要能够解密秘密,因此,我也需要部署加密密钥。这是先有鸡还是先有蛋的问题。
对此有什么建议吗?其他软件如何解决这个问题?
编辑:我刚找到这个 RFC6819。似乎这是 oauth
.
在这种情况下,您可以使用 Implicit Grant Flow,它是为客户端应用程序设计的,出于安全原因,在这些应用程序中存储秘密是不切实际的。