我正在实现一个使用Google Client ID和Google Client Secret的登录流。我正在考虑谷歌客户端秘密的安全含义,以及谁应该能够访问它。
当前客户端秘密存储在一个环境变量中,但我想知道访问这个秘密的人可以用它来确定哪些开发人员应该访问这个环境变量,以及我是否应该在开发与生产中设置不同的OAuth2应用程序。
客户端id和客户端秘密类似于登录名和密码。它们使您的应用程序能够请求用户同意访问其数据。如果您正在存储刷新令牌,它还将赋予用户从您的刷新令牌创建访问令牌的访问权限。
google的TOS状态
要求开发人员做出合理的努力来保持他们的私钥的私密性,而不是将它们嵌入到开源项目中。
你不应该和任何人分享这个。它应该只被你和你的开发人员使用。
理想情况下,您应该有一个测试和生产客户端id。您的开发人员可以使用测试客户端id,唯一应该使用您的生产验证项目客户端id的是您的生产环境。我个人会把它们存放在一个秘密的仓库里。这取决于您指定的OAuth应用程序的类型。在Google Cloud中创建OAuth客户端ID时(有了客户端秘密),您将被要求指定您正在创建的应用程序的类型:
-
如果选择Web App,您的客户端秘密应该是真正的秘密,因为它被谷歌视为这样,并用于验证您自己的服务器。因此,您应该隐藏它,特别是不要将其包含在开源代码中。
-
然而,也有创建桌面应用程序的选项这意味着您希望在没有自己的服务器的情况下使用OAuth。对于这种情况,Google的文档说:
该过程产生一个客户端ID,在某些情况下,产生一个客户端将其嵌入到应用程序的源代码中。(在在此上下文中,客户端秘密显然不被视为秘密。)
所以在这种情况下,为你的用户在你的应用程序中包含客户端秘密是很好的(甚至是必要的)。