2014-11-20 9 views
0

В настоящее время я сталкиваюсь с множеством проблем с токеном CSRF. Нашей текущей настройкой является Ruby API и Angular front-end, которые живут в другом домене.Угловой токен CSRF + ruby ​​api

Внутренний интерфейс Ruby служит API для интерфейсного интерфейса.

Я потратил много времени на изучение этой проблемы, но я не могу найти правильное решение.

До сих пор решения, которые я нашел являются:

  • Сформировать маркер и вставить его в DOM (различные домены, так что не может сделать это)
  • Пусть API возвращает маркер CSRF по запросу GET (похоже, не работает, и это нехорошее решение, так как я не хочу делать дополнительный запрос, чтобы получить токен)

Так что я скорее застрял здесь, а не конечно, как продолжить.

Действительно ли текущая реализация не работает? Как другие люди создают API с oauth, не сталкиваясь с этой проблемой?

ответ

0

Не уверен, что это поможет, но вот образец простого todo api в рубине с угловым интерфейсом, и я использую токен для аутентификации, созданный после того, как пользователь заполняет имя пользователя и пароль.

https://github.com/sirfilip/todoapi/blob/master/app.rb (API-интерфейс написан на Синатрой и продолжение) https://github.com/sirfilip/todoapiclient/blob/master/public/js/angular-todoapi-plugin.js (угловой клиента API сервиса, который используется для связи с АНП)

+0

Спасибо за пример, но большинство вещей, которые вы делаете, я уже делал. Я возвращаю токен CSRF по запросу, я чувствую, что Angular ничего не делает с этим.Из чтения об этом кажется, что Angular должен обрабатывать это автоматически. –

0

TL; DR: Закрепить ваши рельсы API с doorkeeper gem.

Этот SO post представляется приемлемым ответом, когда ваши api и клиент существуют в одном домене.

В посте они очертить angularJS DOCS http://docs.angularjs.org/api/ng $ HTTP:.

Поскольку только JavaScript, который работает на вашем домене может прочитать куки, ваш сервер может быть уверен, что XHR пришел из JavaScript работает в вашем домене.

Чтобы воспользоваться этим (CSRF защиты), сервер должен установить маркер в JavaScript читаемых куков сессии под названием XSRF-ЗНАК по просьбе первого HTTP GET. В последующем не-GET запрашивает сервер может проверить, что заголовок печенье ссылок X-XSRF-ЗНАК HTTP

кажется, что безопасность хранения и передачи XSRF-токен куки сессии, таким образом, зависит от наличия вашего api и ваш front-end находятся в одном домене. Поскольку это не так, вам может потребоваться реализовать еще одну форму авторизации для любого данного сеанса клиента, например OAUTH. Я бы рекомендовал взглянуть на doorkeeper gem. Драгоценный камень даст вам возможность взаимодействовать с вашим апи, как если бы вы были другим клиентом.