使用密码授予 OAuth-2 流程,如果非管理员用户请求访问令牌,scope: 'admin'
我希望能够拒绝这种情况的发生 - 我正在使用带有设计的门卫。
目前,任何老用户都可以请求任何范围,默认情况下它会被授予。
我没有看到门卫有明显的钩子来执行这种逻辑。我应该在哪里/如何配置它?
使用密码授予 OAuth-2 流程,如果非管理员用户请求访问令牌,scope: 'admin'
我希望能够拒绝这种情况的发生 - 我正在使用带有设计的门卫。
目前,任何老用户都可以请求任何范围,默认情况下它会被授予。
我没有看到门卫有明显的钩子来执行这种逻辑。我应该在哪里/如何配置它?
目前这在 doorkeeper 3.x 中是不可能的。您需要对OAuth::PreAuthorization
类进行monkeypatch 或fork gem 以添加所需的逻辑。
我也有类似的需求,所以我把它做成了一个配置选项,你可以在其中指定自己的preauth
类。代码在这里。门卫维护人员表示他们想更多地考虑该功能。
使用 Doorkeeper 4.xx 我正在检查是否存在“管理员”范围,以及当前用户是否是 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