Отказался устанавливать небезопасный заголовок «cookie» и net :: ERR_INSECURE_RESPONSE в AngularJS

0

Я пытаюсь сделать запрос REST на сервере Wildfly. Сначала я должен войти в старое приложение и получить cookie. Этот файл cookie должен использоваться в более новом приложении, которое делает запросы REST. Новое приложение представляет собой шаблон из реального существующего. Я пробовал некоторые параметры в заголовке запроса REST, например, задавать свойства withCredentials, Access-Control-Allow-Credentials, токен, crossDomain, как показано в функции getAllEntities ниже.

Запросы REST, где протестированы, и они отлично работали с RestClient в браузере Firefox, как показано ниже.

Я не знаю как:

  • вставить cookie, который я получаю из предыдущего приложения

  • удалить токен (кажется, это невозможно)

  • решить эти две ошибки, которые написаны в заголовке

Вот как выглядит запрос в RestClient:

Method: GET 
URL: https://xx.xx.xx.xx:8443/api/codes
Content-Type: application/json
Accept: application/json
Cookie: code_system_frontend=bvkkvbcp24igdgja4h5hht13p4; code=ae8be9267e8dfea86a8f54f6bd980733

Вот как выглядит реакция в RestClient:

Status Code: 200 OK
Access-Control-Allow-Headers: Content-Type, Content-Disposition, Accept, responseType, X-MAC, X-TIME, Cookie
Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Content-Type, Content-Disposition, Accept
Connection: keep-alive
Content-Type: application/json
Date: Tue, 26 Jul 2016 15:22:00 GMT
Server: WildFly/9
Transfer-Encoding: chunked
access-control-allow-credentials: true
x-powered-by: Undertow/1

и типичный корпус ответа JSON:

[
    {
        "code": 1,
        "codename": "Demo"
    },
    {
       "code": 2,
       "codename": "Gmx"
    }
    //AND SO ON 
]

Это код в Angularjs:

function getAllEntities(entityName, addToCache) {
    config = {
       headers: {

                'cookie':'code_system_frontend=bvkkvbcp24igdgja4h5hht13p4;code=ae8be9267e8dfea86a8f54f6bd980733',
                'Content-Type': 'application/json',
                'Accept': 'application/json',
                'withCredentials':'true',
                //'Access-Control-Allow-Credentials': 'true',
                //'X-API-TOKEN': undefined,
                //'token':undefined,
                //crossDomain: true
            },
            data: ''
        };

        return $http.get(endPoints.api + entityName, config)
            .then(getAllEntitiesComplete)
            .catch(function (message) {
                exception.catcher('XHR Failed for getAllEntities for entity ' + entityName)(message);
                return $q.reject(message);
                logger.info('Message ' + message);
            });

        function getAllEntitiesComplete(data, status, headers, config) {

            var entities = data.data;

            if (addToCache) {
                service.cachedLookups[entityName] = entities;
                service[entityName + 's'] = entities;
            }
            return entities;
        }
    }

В Firebug я получаю:

Заголовок запроса в Firebug:

Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.5
Content-Type: application/json
Host: XX.XX.XX.XX:8443
Origin http://admin.dev.xxxxxxxx.xxx
Referer http://admin.dev.xxxxxxxx.xxx/xx/codes
User-Agent Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
token fake token for anonymous user 
withCredentials true

И я также получаю предупреждение в Firebug:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the 
remote resource at https://xx.xx.xx.xx:8443/xxxxxxxx/api/code. (Reason: 
CORS header 'Access-Control-Allow-Origin' does not match '*').

И я получаю эту ошибку из-за моего кода:

Error: XHR Failed for getAllEntities for entity suborder Object { status=0, config={...},  data=null,  more...}

В Crome я получаю:

Refused to set unsafe header "cookie" 

а также

net::ERR_INSECURE_RESPONSE
Теги:
cookies
rest
access-token

1 ответ

1
Лучший ответ

Запрос на перекрестный запрос заблокирован: политика одинакового происхождения запрещает чтение удаленного ресурса по адресу https://xx.xx.xx.xx: 8443/xxxxxxxx/api/code. (Причина: заголовок CORS "Access-Control-Allow-Origin" не соответствует "*").

Похоже, что вы не включили Cross Origin Resource Sharing (CORS) на свой сервер или неправильно настроили его.

Что касается проблемы с заголовком, вы должны посмотреть на этот пост:

Ошибка сообщения AJAX: отказ от установки небезопасного заголовка "Соединение"

XMLHttpRequest не разрешено устанавливать эти заголовки, они автоматически устанавливаются браузером. Причина в том, что, манипулируя этими заголовками, вы можете обмануть сервер в принятии второго запроса через одно и то же соединение, которое не будет проходить обычные проверки безопасности - это будет уязвимость безопасности в браузере.

Если вы используете файлы cookie, cookie должен автоматически отправляться с каждым запросом, особенно если вы установили withCredentials = true.

Однако, если вы используете токены, вы должны добавить их в заголовок авторизации, как правило, в формате: "Bearer" + mytoken

Ещё вопросы

Сообщество Overcoder
Наверх
Меню