Привратник - отклонить запрос токена доступа, если пользователь не является администратором

Использование потока OAuth-2 с предоставлением пароля. Если пользователь, не являющийся администратором, запрашивает токен доступа с помощью scope: 'admin', я хочу иметь возможность отклонить это — я использую привратник с devise.

В настоящее время любой старый пользователь может запросить любую область действия, и по умолчанию она предоставляется.

Я не вижу очевидного крючка в привратнике для реализации такой логики. Где/как мне это настроить?


person cjroebuck    schedule 11.10.2014    source источник


Ответы (2)


В настоящее время это невозможно с привратником 3.x. Вам нужно будет изменить класс OAuth::PreAuthorization или разветвить гем, чтобы добавить необходимую логику.

У меня была аналогичная потребность, поэтому я превратил это в параметр конфигурации, где вы можете указать свой собственный класс preauth. Код находится здесь. Сопровождающие привратники указали, что они хотят больше подумать об этой функции.

person Dave S.    schedule 26.06.2015

Используя Doorkeeper 4.x.x, я проверяю наличие области «admin» и является ли текущий пользователь администратором в инициализаторе 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
person Aurel Branzeanu    schedule 18.10.2016