У меня есть приложение Rails 4. Я использую devise для аутентификации и opro для предоставления oauth2 с моим API. Все запросы авторизуются с помощью политик pundit, и до сих пор эта настройка работала нормально.
В настоящее время моя авторизация всегда выполняется для каждого пользователя. Это имеет смысл, так как обычно каждый запрос выполняется от имени конкретного пользователя, который либо аутентифицируется в сеансе, либо предоставляет токен oauth.
Новая проблема заключается в следующем: у меня есть определенные потребители API (далее я буду называть их устройствами), чьи запросы нельзя рассматривать как запросы от конкретного пользователя. Одним из них является сервер Asterisk, который может обмениваться информацией с API, другой — блок GPS-трекинга, который постоянно отправляет точки отслеживания в API.
Таким образом, мне нужно авторизовать определенные операции API для каждого устройства, то есть не обязательно current_user
доступно. Однако отсутствие current_user
портит мою концепцию авторизации.
Я уже рассмотрел несколько подходов к проблеме:
- creating dedicated users for each device and authorizing them to do the specific action
- pro: does not screw up my authorization scheme
- против: это означало бы переосмыслить
User
-модель, поскольку в настоящее время у меня есть только «естественные пользователи», которым требуется имя, день рождения, адрес электронной почты и т. д.
- creating dedicated controllers with adapted authorization scheme
- pro: high flexibility
- contra:
- authentication for devices required
- требуются дополнительные конечные точки API, не очень СУХОЙ
Я ищу наилучший подход для такой ситуации. Я считаю, что это не экстраординарная проблема, и должны быть хорошие решения для этого.