门卫 - 如果用户不是管理员,则拒绝访问令牌请求

时间:2014-10-11 02:04:17

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

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

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

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

2 个答案:

答案 0 :(得分:0)

门卫3.x目前无法实现这一目标。您需要对⚈ Data in client is _encoded_ latin1 versus utf8 ⚈ SET NAMES (or equivalent) is latin1 versus utf8 ⚈ The target column's CHARACTER SET is ascii vs latin1 vs utf8 类进行monkeypatch或者对gem进行分叉以添加所需的逻辑。

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

答案 1 :(得分:0)

使用Doorkeeper 4.x.x我正在检查是否存在'admin'范围,如果当前用户是门卫初始化程序中的admin:

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