2015-01-26 2 views
0

Я занимаюсь Android-приложением, которое использует OData из SAP Gateway в java. В этот момент я могу получить данные из шлюза, но когда я хочу что-то обновить или создать что-то, возникает ошибка, говорящая «Ожидаемый статус ОК или Нет содержимого» .... Я читал в Интернете, и мне нужно было бы извлекать токен CSRF в GET и устанавливать его на операции post и put .... Как это сделать в приложении ODroid для приложений, использующих OData из SAP Gateway и используя OData4j? Мой код для создания потребителя заключается в следующем:Отсутствует приложение Android Token CSRF с шлюзом SAP Netweaver

  ODataConsumer consumer = ODataConsumers.create(serviceUrl); 
      ODataConsumer.Builder builder = ODataConsumers.newBuilder(serviceUrl); 
      builder.setClientBehaviors(new BasicAuthenticationBehavior("myuser", "mypass")); 
      consumer = builder.build(); 

Как вы можете видеть, у меня есть основная аутентификация, но пропустить маркер CSRF ...

Я надеюсь, что вы можете мне помочь.

Большое спасибо,

Borja.

+0

У вас есть решение на это? и в случае, если вы сможете решить, можете ли вы поделиться своими знаниями по этому поводу. –

ответ

0

При установке клиента поведения в builder объекта, передать параметр BasicAuthenticationBehavior объект, передающий новый объект SAPCSRFBehaviour ..

builder.setClientBehaviors(new BasicAuthenticationBehavior(serviceLocation.getUserName(), serviceLocation.getPassword()), new SAPCSRFBehaviour()); 

How to handle CSRF tokens while consuming Gateway services using odata4j

+1

Привет, Скотт, я попробовал этот вариант, и это не работает для меня. Когда я устанавливаю поведение клиента и передаю объект SAPCSRFBehaviour, ответ Gateways с ошибкой 403 «Запрещен». Мы можем решить проблему, следующую за этой публикацией: http://scn.sap.com/docs/DOC-54896 Теперь нет необходимости устанавливать объект SAPCSRFBehaviour. Нам нужно только установить эти заголовки: request = request.header («X-Requested-With», «XMLHttpRequest») .header («Авторизация», «Базовый» + кодированный); В любом случае, большое спасибо;) Borja – Gargim

0

необходимо сначала обратиться в службу OData с заголовком, установленным в получить токен. Затем вы совершаете звонки с использованием токена.

**request = request.header("X-CSRF-Token", "Fetch")** 

Если сценарий атака Cross маркер использование активно, по умолчанию, вы должны сделать этот вызов первым.

Используйте инструмент вызова вызова getway или любое запущенное приложение UI5, которое выполняет вызовы ODATA и отслеживает вызовы, вы увидите отправленный запрос маркера.