Есть ли способ ограничить доступ к определенным приложениям для определенных пользователей? - PullRequest
0 голосов
/ 07 июня 2019

Я создал несколько приложений, которые связываются с нашим центральным сервером авторизации через привратника.Я хочу сделать некоторые приложения доступными / недоступными для определенных пользователей.

Есть ли способ ограничить доступ к определенным приложениям oauth_applications и вернуть 401?

1 Ответ

0 голосов
/ 07 июня 2019

Я полагаю, что самым простым способом добиться этого было бы следующее:

  1. В вашем приложении для привратника измените таблицу Users, чтобы включить отношение разрешений.Примерно так: Пользователь -> имеет много -> разрешений

И эти разрешения могут содержать только название приложения, к которому вы хотите предоставить им доступ (или идентификатор приложения, который вы выбираете)

Затем в вашем config / initializer / doorkeeper.rb - внутри Doorkeeper :: JWT.configure - вы добавляете, к каким приложениям этот конкретный пользователь может получить доступ внутри полезной нагрузки токена, что-то вроде:
token_payload do |opts|
  ...
  token[:permissions] = user.permissions.pluck(:application_name)
end

Если вы используете Doorkeeper без JWT, вы все равно можете передать дополнительную информацию токену, добавив пользовательский ответ на объект ResponseToken, например:

Doorkeeper::OAuth::TokenResponse.send :prepend, CustomTokenResponse

и CustomTokenResponse просто необходимо реализовать методы body вот так:

module CustomTokenResponse
  def body
    additional_data = {
      'username' => env[:clearance].current_user.username,
      'userid' => @token.resource_owner_id # you have an access to the @token object
      # any other data
    }

    # call original `#body` method and merge its result with the additional data hash
    super.merge(additional_data)
  end
end

дополнительную информацию можно найти в вики портье: https://github.com/doorkeeper-gem/doorkeeper/wiki/Customizing-Token-Response и в самоцвете портье JWT: https://github.com/doorkeeper-gem/doorkeeper-jwt#usage

...