我正在从Rails应用的Google登录中收到401-Deleted_client。我以前曾使用过它,但在不知不觉中将我的secrets.yml文件中的ID和密码提交给了GitHub。
我删除了旧的受感染的客户端,创建了新的客户端ID,并更改了omniauth.rb文件中的ID和机密,现在每次我使用Google登录时,都会引发401错误。我需要刷新什么吗?我不想重新启动该应用程序。
Authorization Error
Error 401: deleted_client
The OAuth client was deleted.
在Rails 6中,您想使用加密的凭据。运行rails credentials:edit
。这将在为外壳配置的任何编辑器(例如vi,nano或emacs)中打开一个空白的Yaml文件。
将您的凭据添加到文件中:
google:
client_id: "YOUR CLIENT ID"
client_secret: "YOUR CLIENT ID"
保存文件时,Rails会创建用config/credentials.yml.enc
加密的/config/master.key
。此密钥文件应该在您的gitignore中,而config/credentials.yml.enc
实际上可以在您的存储库中提交。
在您的config/intializers/omniauth.rb
中使用加密的凭据:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2,
Rails.application.credentials.google.fetch(:client_id),
Rails.application.credentials.google.fetch(:client_secret)
end
虽然ENV变量比旧的纯文本不那么秘密secrets.yml
麻烦得多,但它们本身确实有很大的问题。系统上任何写得不好的gem都可能会输出整个ENV哈希,这将为攻击者提供所有凭据,例如数据库密码。
使用加密的凭据,攻击者不仅需要主密钥,而且还需要文件系统访问权,这时无论如何它都是真正的游戏。