EventSource и базовая HTTP-аутентификация - PullRequest
9 голосов
/ 08 июля 2011

Кто-нибудь знает, можно ли отправить базовые учетные данные для аутентификации http с помощью EventSource?

Ответы [ 3 ]

2 голосов
/ 07 октября 2011

Если вы говорите о файлах cookie (не http-аутентификации):

EventSource использует http, поэтому файлы cookie отправляются с запросом подключения к EventSource.

Должна поддерживаться аутентификация Http, как и любые другие URL-адреса http,хотя из спецификации CORS + http аутентификация не поддерживается

2 голосов
/ 27 марта 2015

Я ищу решение той же проблемы.В этом посте здесь говорится следующее:

Еще одна оговорка: насколько нам известно, вы не можете изменять заголовки HTTP при использовании EventSource, что означает, что вы должны отправить запрос авторизации.строковый параметр со значением, которое вы бы вставили, используя HTTP Basic Auth: конкатенация вашего логина и токена в кодировке base64.

Вот код из сообщения:

// First, we create the event source object, using the right URL.
var url = "https://stream.superfeedr.com/?";
url += "&hub.mode=retrieve";
url += "&hub.topic=http%3A%2F%2Fpush-pub.appspot.com%2Ffeed";
url += "&authorization=anVsaWVuOjJkNTVjNDhjMDY5MmIzZWFkMjA4NDFiMGViZDVlYzM5";

var source = new EventSource(url);

// When the socket has been open, let's cleanup the UI.
source.onopen = function () {
  var node = document.getElementById('sse-feed');
  while (node.hasChildNodes()) {
    node.removeChild(node.lastChild);
  }
};

// Superfeedr will trigger 'notification' events, which corresponds
// exactly to the data sent to your subscription endpoint 
// (webhook or XMPP JID), with a JSON payload by default.
source.addEventListener("notification", function(e) {
  var notification = JSON.parse(e.data);
  notification.items.sort(function(x, y) {
    return x.published - y.published;
  });
  notification.items.forEach(function(i) {
    var node = document.getElementById('sse-feed');
    var item = document.createElement("li");
    var t = document.createTextNode([new Date(i.published * 1000), i.title, i.content].join(' '));
    item.appendChild(t);
    node.insertBefore(item, node.firstChild);
    // We add the element to the UI.
  });
});
2 голосов
/ 08 июля 2011

EventSource о сервере, отправляющем события клиенту. Я думаю, что вам нужна двунаправленная связь для аутентификации. Как бы вы иначе отправили действительные учетные данные?

WebSockets, однако, может достичь этого. Это то, что вы ищете?

Обновление:

Вы можете достичь того, что хотите, используя куки, как указано 4esn0k . Файлы cookie отправляются вместе с первоначальным запросом, который браузер устанавливает для установления соединения. Поэтому просто убедитесь, что вы установили идентификатор сеанса для файла cookie, прежде чем запускать какие-либо подключения к EventSource.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...