【问题标题】:Omniauth-Google error 401 - deleted_clientOmniauth-Google 错误 401 - deleted_client
【发布时间】:2020-04-15 14:19:00
【问题描述】:

我收到来自 Google 的 401 - deleted_client 登录我的 rails 应用程序。我之前有它工作过,但我在我的 secrets.yml 文件中不知不觉地将 id 和秘密提交给了 GitHub。

我删除了旧的和受感染的客户端,创建了一个新的客户端 ID,并更改了我的 omniauth.rb 文件中的 ID 和密码,现在每次我使用 Google 登录时都会引发 401 错误。我需要刷新什么吗?我不想重新启动应用程序。

Authorization Error
Error 401: deleted_client
The OAuth client was deleted.

【问题讨论】:

  • 我们讨论的是什么版本的 Rails?如果您使用的是 Rails 5.2+,则应该使用加密凭据。也很难知道你在这里实际上在做什么。您是否只是通过将新凭据硬编码到 omniauth.rb 中来“解决”问题?还是您还在使用 secrets.yml(这是您苦心学习的一个坏主意)?
  • 我使用的是 Rails 6.0.2.2。我在没有意识到的情况下提交了 secrets.yml。我删除了 Google 开发者控制台上的应用程序/客户端详细信息,创建了新凭据并将新的 id 和密钥存储在我的 .env 文件中。我从未对凭据进行硬编码。我通过omniauth.rb 构建器运行了.env 变量。现在我的问题是当我使用我的应用程序尝试 Google 登录时,它会引发 401 错误。我是 Oauth 的新手。如果这很明显,我深表歉意,但我无法找到并理解解决方法。

标签: ruby-on-rails ruby oauth-2.0 omniauth google-oauth


【解决方案1】:

在 Rails 6 中,您希望使用加密凭据。运行rails credentials:edit。这将在您为 shell 配置的任何编辑器(例如 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 哈希,这会给攻击者提供所有凭据,例如数据库密码。

使用加密凭据,攻击者不仅需要主密钥,还需要文件系统访问权限,此时它的游戏真的结束了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 2013-10-11
    • 2018-12-13
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 2016-11-21
    相关资源
    最近更新 更多