Аутентификация и авторизация при построении API на Grape

Александр Борисов, 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 третьей стороной, используйте HTTPS;
  • чтобы усложнить исследование протокола, можно добавить механизм подписи токена секретным ключом на клиенте, с последующей проверкой подписи на сервере.

Отслеживание сессий

Токены можно использовать для отслеживания сессий в API: по сессиям можно понять, кто, когда и какие действия совершал.


В следующей статье я расскажу про вывод данных в API на Grape.

Смотрите также


comments powered by Disqus
Блог Цифрономики

Мысли о веб-разработке на Ruby on Rails: работа с кодом, приёмы, инструменты, организация процесса разработки.

@cifronomika
RSS


Веб-разработка на Ruby on Rails, реализация сложных проектов
mailbox@cifronomika.ru
+7 (910) 535-99-11