Александр Борисов, 5 октября 2014
При построении API нужно решать задачу контроля доступа. Она состоит из двух подзадач: аутенификации – процесса определения того, кто пытается получить доступ, и авторизации – процесса предоставления доступа к тем или иным ресурсам.
В Grape уже реализованы два вида аутентификации: HTTP Basic и HTTP Digest. Встроенного решения для авторизации в геме нет.
В этой статье я расскажу, как решить задачу контроля доступа с помощью токена. Рассмотрим пример:
Задача аутентификации решается вызовом метода authenticate_current_user!
в строке 13 файла friends_api.rb
. Этот метод ищет пользователя по переданному токену, и поднимает исключение Api::V1::BaseAPI::InvalidToken
если пользователь не найден.
Важно явно в начале каждой точки входа в API вызывать authenticate_current_user!
– таким образом мы показываем, что мы будем работать в этой точке входа с пользователем по токену.
Задача авторизации решается с помощью гема six, об использовании которого в Ruby on Rails я уже писал. В строке 14 файла friends_api.rb
мы вызываем метод authorize!
, который проверяет, что разрешение :friends
находится в списке доступных действий над ресурсом resource_user
для пользователя current_user
(файл base_api.rb
, строка 14). Если нужного разрешения в списке нет, то поднимается исключение Api::V1::BaseAPI::AccessDenied
.
Код, который определяет список доступных действий над ресурсом нужно вынести в отдельный файл.
Токены можно использовать для отслеживания сессий в API: по сессиям можно понять, кто, когда и какие действия совершал.
В следующей статье я расскажу про вывод данных в API на Grape.
Мысли о веб-разработке на Ruby on Rails: работа с кодом, приёмы, инструменты, организация процесса разработки.
Веб-разработка на Ruby on Rails, реализация сложных проектов
mailbox@cifronomika.ru
+7 (910) 535-99-11