【问题标题】:Doorkeeper - Reject access token request if user not an adminDoorkeeper - 如果用户不是管理员,则拒绝访问令牌请求
【发布时间】:2016-10-18 17:45:11
【问题描述】:

使用密码授予 OAuth-2 流程,如果非管理员用户使用 scope: 'admin' 请求访问令牌,我希望能够拒绝这种情况发生 - 我正在使用带有设计的门卫。

目前任何老用户都可以请求任何范围,默认情况下它会被授予。

我没有看到门卫有明显的钩子来执行这种逻辑。我应该在哪里/如何配置它?

【问题讨论】:

    标签: ruby-on-rails api authentication oauth-2.0 doorkeeper


    【解决方案1】:

    目前这在 doorkeeper 3.x 中是不可能的。您需要对 OAuth::PreAuthorization 类进行猴子补丁或 fork gem 以添加所需的逻辑。

    我也有类似的需求,所以我把它变成了一个配置选项,您可以在其中指定自己的 preauth 类。代码是here。门卫维护人员注明they wanted to think more about the feature

    【讨论】:

      【解决方案2】:

      使用 Doorkeeper 4.x.x 我正在检查是否存在“管理员”范围,以及当前用户在 Doorkeeper 的初始化程序中是否为管理员:

      resource_owner_from_credentials do
        user = User.find_for_database_authentication(login: params[:login])
        if user&.active_for_authentication? && 
          user.valid_for_authentication? { user.valid_password? params[:password] }
            admin_scope = params[:scope]&.split&.include?('admin')
            user if admin_scope && user.admin? || !admin_scope
          end
        end
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-22
        • 2018-03-17
        • 1970-01-01
        • 2015-04-05
        • 1970-01-01
        • 2011-12-13
        • 2019-08-20
        • 2016-06-19
        相关资源
        最近更新 更多