【发布时间】:2016-10-18 17:45:11
【问题描述】:
使用密码授予 OAuth-2 流程,如果非管理员用户使用 scope: 'admin' 请求访问令牌,我希望能够拒绝这种情况发生 - 我正在使用带有设计的门卫。
目前任何老用户都可以请求任何范围,默认情况下它会被授予。
我没有看到门卫有明显的钩子来执行这种逻辑。我应该在哪里/如何配置它?
【问题讨论】:
标签: ruby-on-rails api authentication oauth-2.0 doorkeeper
使用密码授予 OAuth-2 流程,如果非管理员用户使用 scope: 'admin' 请求访问令牌,我希望能够拒绝这种情况发生 - 我正在使用带有设计的门卫。
目前任何老用户都可以请求任何范围,默认情况下它会被授予。
我没有看到门卫有明显的钩子来执行这种逻辑。我应该在哪里/如何配置它?
【问题讨论】:
标签: ruby-on-rails api authentication oauth-2.0 doorkeeper
目前这在 doorkeeper 3.x 中是不可能的。您需要对 OAuth::PreAuthorization 类进行猴子补丁或 fork gem 以添加所需的逻辑。
我也有类似的需求,所以我把它变成了一个配置选项,您可以在其中指定自己的 preauth 类。代码是here。门卫维护人员注明they wanted to think more about the feature。
【讨论】:
使用 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
【讨论】: