При использовании aqueduct для авторизации доступа к html-страницам подходит oauth.

Я обслуживаю страницы HTML с помощью Aqueduct, и я хотел бы, чтобы авторизация страниц, к которым был получен доступ, работала без ручной настройки заголовка авторизации с javascript для каждой ссылки. Как это сделать?

Единственный способ, которым я вижу это, - это использовать куки. Я попытался поместить токен носителя OAuth в файл cookie, чтобы он отправлялся с каждым запросом, но я застреваю, пытаясь скрыть его обратно из файла cookie в заголовок запроса (где это ожидается стандартным авторизатором на стороне сервера) в качестве запроса заголовки неизменяемы.

Нужно ли мне писать новый авторизатор, чтобы использовать токен из файла cookie? Я читал, что вообще не следует использовать файлы cookie с OAuth. Итак, как это сделать? Конечно, мне чего-то не хватает, потому что это обычная потребность.

Другая идея (все еще использующая файлы cookie) состоит в том, чтобы извлечь токен из файла cookie на сервере и перенаправить запрос обратно на (тот же) сервер с правильным заголовком авторизации.

Как лучше всего обрабатывать авторизацию веб-страниц акведуков?


person Alan    schedule 16.05.2020    source источник


Ответы (1)


Авторизация должна быть отправлена ​​в заголовке, и браузер не будет делать это за меня, кроме как с помощью cookie, что не рекомендуется. Ответ, который я придумал, заключается в том, что должна быть получена html-страница (без содержимого) и содержимое веб-страницы, запрошенное с использованием авторизации с использованием js с заголовком авторизации, включенным в запрос.

Мой путь вперед состоял в том, чтобы заменить всю веб-страницу, потому что я не хотел менять большую часть того, что работало. Итак, на странице обертки html я делаю это:

    var uri = NEWURI;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', uri);
    xhr.onreadystatechange = handler;
    xhr.responseType = 'text';

    var authorization = localStorage.getItem("authorization"); // setup by by login page
    if (authorization != null)
    {
      xhr.setRequestHeader('Authorization', authorization);
    }
    xhr.send();

а затем в обработчике пишу поверх документа:

  if (this.readyState === this.DONE) {
    if (this.status === 200) {
      var newHTML = document.open("text/html", "replace"); 
            newHTML.write(this.response); 
            newHTML.close();

    } else if (this.status === 401)
    {

    }
person Alan    schedule 02.07.2020