2013-04-23 3 views
8

Я делаю простой вход с помощью Node.js с CORS и Angular.js.Node.js CORS session cookie с Angular.js

Это --- client.example.com делает POST слишком api.example.com/login, где на успех сеанса печенья возвращается слишком client.example.com и может получить доступ тоже GET службы, как api.example.com/secret защищаемого куки сессии.

Выполнение запросов GET, которые не защищены cookie сеанса, не является проблемой.

В конечном счете, цель здесь слишком authenticate a client side app to a REST api using CORS with a local stradegy --- то есть имя пользователя & пароль --- даже если соглашение не по возможности выше.

Я не могу найти работу, чтобы учиться в любом месте - назовите меня в правильном направлении?

Бонус: Показать рабочий пример.

+0

Это возможно, только если вы установили домен вашего файла cookie как .example.com. Вы не можете установить cookie для client.example.com с api.example.com: http://stackoverflow.com/questions/1062963/how-do-browser-cookie-domains-work – alexwen

+0

@alexwen Что делать, если я хочу принять из любого домена, например --- client.example1.com' и 'client.example2.com'. Цель здесь - слишком аутентифицировать приложение на стороне клиента, также REST api, используя CORS с локальным stradegy --- то есть 'username' и' password'. –

ответ

2

Ваша проблема очень проста, браузеры не позволяют отправлять файлы cookie, установленные в одном домене, для отправки в другой домен.
Это для обеспечения безопасности. Если ваш cookie сеанса был доступен из любого домена, то любой сайт мог бы выполнить csrf (по определению, что вы хотите сделать csrf - используйте сеанс с одного сайта на другом сайте).

Есть способы вокруг него, хотя вы должны быть осторожны при их применении.

  • Самый простой способ заключается в использовании JSONP для входа и сделать кросс-доменных запросов, JSONP в основном ломает печенье политики между доменами.

  • Вы можете встроить IFrame в client.example.com странице, которая находится в api.example.com, родитель и плавающего фрейма может обмениваться данными с помощью post message.

Оба пути открыты для запросов CSRF (по своей природе), так что вы должны быть очень осторожны в том, что информации, которую вы позволяете client.example.com получить доступ.