【问题标题】:Override AuthorizationsController Doorkeeper覆盖授权控制器门卫
【发布时间】:2017-04-01 12:40:22
【问题描述】:

我正在覆盖 Doorkeepers AuthorizationsController。正如docs 建议的那样,我从AuthorizationsController 继承。现在下面的代码显示了我最近的覆盖尝试。

我目前拥有的

基本上,在new Authorization Doorkeeper process 周围添加一个额外的 if 语句。我添加了第 3-7 行,目前运行良好。如果第 6 行等于 true,它会返回我 :error

我的问题

我仍然可以通过浏览器 URL 和服务器日志看到 AccessToken。所以作为一个用户,我仍然可以使用这个 AccessToken 来检索一些数据,例如 Postman。即使它在登录时给了我一个错误。这是为什么呢?我怎样才能防止这种情况发生?

class AuthorizationsController < Doorkeeper::AuthorizationsController
  def new
    application = Application.find(authorization.authorize.pre_auth.client.id)
    resource_owner = User.find(current_resource_owner)

    if application.users.exclude?(resource_owner) && application.owner != resource_owner
      render :error
    elsif pre_auth.authorizable?
      if skip_authorization? || matching_token?
        auth = authorization.authorize
        redirect_to auth.redirect_uri
      else
        render :new
      end
    else
      render :error
    end
  end

end

如果您检查由 DigitalOcean 编写的 introduction 到 OAuth2,我的 if 语句在第 3 步“用户代理接收带有重定向 URI 的访问令牌”上仍然成功,因为我可以在浏览器 URL 中看到带有重定向 URI 的 AccessToken .在第 3 步之后,它给了我:error

更新

在我对 AuthorizationsController 的覆盖开始之前,生成 AccessToken 的整个过程已经完成。我添加了一个简单的before_action 以打印到服务器日志,但在此之前Doorkeeper::AccessToken Load (0.9ms) SELECT 'oauth_access_tokens'.* FROM 'oauth_access_tokens' WHERE 'oauth_access_tokens'.'token' = 'x' LIMIT 1 发生。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 doorkeeper


    【解决方案1】:

    您假设您在浏览器 url 中看到的令牌是 OAuth access_token。它实际上只是一个JWT(JSON Web Token)。我假设此令牌是某种会话令牌,因为 Doorkeeper 尚未授权用户使用该应用程序。您错误地假设您的 OAuth 流程到达“用户代理通过重定向 URI 接收访问令牌”步骤。

    您网址中的令牌完全没有害处,因此您没有理由阻止您的应用程序发出令牌。如果用户中断他们的会话,令牌将变得无用。

    希望这会有所帮助:)

    【讨论】:

      【解决方案2】:

      在第 3 行和第 4 行,您正在调用 authorization.authorize,这可能实际上是在进行授权,然后将访问令牌添加到响应中。

      【讨论】:

      • 我一开始也是这么想的。但是当我将第 3 行和第 4 行更改为 Application.last 和用户一样时,它仍然在浏览器 URL 中返回一个令牌。
      猜你喜欢
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多