Sap 4 Hana Router не работает должным образом - PullRequest
0 голосов
/ 30 августа 2018

У меня есть пробная учетная запись sap, и я разрабатываю приложение sap ui5 с бэкэндом весенней загрузки в облачной среде. У меня также есть маршрутизатор приложения, используемый для аутентификации / авторизации и для доступа к моему приложению. У меня есть простая страница index.html, на которой есть кнопка, которая вызывает мой весенний бэкэнд ("/ hello"), и кнопка выхода из системы ("/my/logout").

Все ссылки, которые я даю в этом посте, доступны только через approuter (/index.html, / hello и / debug являются относительными путями к "https://approuter -p *** trial.cfapps .eu10.hana.ondemand.com ").

Вот цепочка событий, которые я делаю, и которые меня озадачили:

  1. После входа в систему я могу вызвать пружинный бэкэнд, нажав мою кнопку, и он возвращает 200 (ОК).
  2. После того, как я вышел из системы, нажав кнопку выхода из системы (я все еще на той же странице, без перенаправления), я пытаюсь снова вызвать пружинный бэкэнд, нажав кнопку, и он возвращает 401 (ОК). Я могу повторить это много раз, это дает 401 (ОК).
  3. Я пытаюсь получить доступ к бэкэнду, вызвав прямую ссылку из другой вкладки в том же браузере (https://approuter -p *** trial.cfapps.eu10.hana.ondemand.com/hello - это та же ссылка, которая вызывается, когда я нажимаю кнопку пружины), и я получаю 200 - NOK !, я не входил снова ...
  4. Я возвращаюсь на вкладку, в которой был открыт index.html, и снова вызываю бэкэнд пружины, нажав мою кнопку - теперь он также возвращает 200 (НОК!)
  5. Я попытался получить доступ к весенней серверной ссылке из POSTMAN, заголовки и файлы cookie не добавлены - я получаю тот же ответ сервера, что и при вызове его из index.html с помощью кнопки Spring (те же ситуации, что и выше, иногда 401, иногда 200 если ранее к бэкэнду обращались непосредственно в браузере).

Я также проверил токен, полученный через бэкэнд "/ debug", который его печатает, и кажется, что после выхода из системы любой вызов бэкэнда пружины напрямую из браузера (не из index.html или POSTMAN) получает новый Токен JWT, который, кажется, действителен. Единственное отличие, которое я заметил, состояло в том, что 200 ответов приходят с заголовком «X-Frame-Options: DENY», а ответы 401 идут с заголовком «X-Frame-Options: SAMEORIGIN». Это было проверено с Chrome и IE - оба ведут себя одинаково.

Есть идеи, почему это происходит? Мой xs-app.json (используется службой my-xsuaa и, следовательно, approuter) выглядит следующим образом:

{
  "welcomeFile": "index.html",
  "authenticationMethod" : "route",
  "routes": [{
    "source": "/",
    "target": "/",
    "destination": "app-destination-hello"
  }],
  "logout": {
     "logoutEndpoint": "/my/logout"
  },
  "destinations": {
     "app-destination-hello": {
       "logoutPath": "/myrest/logout",
       "logoutMethod": "GET"
     }
  }
}

Спасибо!

Я приложу некоторые следы от approuter, возможно, это поможет. Вот шаги, которые я предпринял с соответствующими журналами (не пропускал ни одной записи журнала между шагами):

  1. Я нажимаю кнопку выхода из index.html:

    2018-08-31T15: 37: 50.63 + 0300 [APP / PROC / WEB / 0] OUT # 2.0 # 2018 08 31 12: 37: 50: 632 # + 00: 00 # ОШИБКА # / Обработчик ### ###### - UTzTjYczINpXSxkJY_QXoWlfSF3dk0O ###### jlhzhep3 # PLAIN ## GET запрос к / my / logout завершен со статусом 401 - Требуется аутентификация # 2018-08-31T15: 37: 50.63 + 0300 [RTR / 7] OUT approuter-p *** trial.cfapps.eu10.hana.ondemand.com - [2018-08-31T12: 37: 50.632 + 0000] "ПОЛУЧИТЬ / my / logout HTTP / 1.1 "401 0 12" https://approuter -p *** trial.cfapps.eu10.hana.ondemand.com/index.html "" Mozilla / 5.0 (Windows NT 10.0 ; Win64; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 68.0.3440.106 Safari / 537.36 "" - "" 10.0.137.79:61038 "x_forwarded_for:" - "x_forwarded_proto:" https "vcap_requb_f47_47:" 407d-6ccb-87d2dd42d4e7 "response_time: 0.002667543 app_id:" 9ceaf8d0-7ee7-4fb2-84d0-05df07af7c01 "app_index:" 0 "x_b3_traceid:" 56fc90749079fa0f "x_b3_spid" x_b3_spid "xp:" 2018-08-31T15: 37: 50,63 + 0300 [RTR / 7] OUT

  2. Я нажимаю кнопку пружины из index.html (имя конечной точки теперь / hello2, но оно то же, что и раньше), и я получаю 401, что в порядке:

    2018-08-31T15: 37: 57.57 + 0300 [APP / PROC / WEB / 0] OUT # 2.0 # 2018 08 31 12: 37: 57: 575 # + 00: 00 # ERROR # / Handler ### ###### utCeM-9IrqFW7oEOGkqMtIoUmwgTpZsv ###### jlhzhk1z # PLAIN ## GET запрос к / hello2 завершен со статусом 401 - Требуется аутентификация #2018-08-31T15: 37: 57.58 + 0300 [RTR / 4] OUT approuter-p *** trial.cfapps.eu10.hana.ondemand.com - [2018-08-31T12: 37: 57.583 + 0000] "ПОЛУЧИТЬ / hello2 HTTP / 1.1 "401 0 12" https://approuter -p *** trial.cfapps.eu10.hana.ondemand.com/index.html "" Mozilla / 5.0 (Windows NT 10.0; Win64 ; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 68.0.3440.106 Safari / 537.36 "" - "" 10.0.137.79:61038 "x_forwarded_for:" - "x_forwarded_proto:" https "vcap_request_id-70-701: 60055 68aa-75d88f2584e2 "response_time: 0.003231487 app_id:" 9ceaf8d0-7ee7-4fb2-84d0-05df07af7c01 "app_index:" 0 "x_b3_traceid:" 25c2df6333a965cf "x_b3_spanid:" 253_p3d: " 2018-08-31T15: 37: 57,58 + 0300 [RTR / 4] OUT

  3. Я открываю ссылку approuter / hello2 из другой вкладки браузера и получаю 200 (NOK): 2018-08-31T15: 38: 00.79 + 0300 [APP / PROC / WEB / 0] OUT # 2.0 # 2018 08 31 12: 38: 00: 797 # + 00: 00 # INFO # / Auth / OAuth2 #### ##### pPyrBRKTJWcfwzc8yP8EExMmQbCfW992 ###### jlhzhmjg # PLAIN ## отправляющая страница с клиентским перенаправлением на https://p***trial.authentication.eu10.hana.ondemand.com/oauth/authorize?response_type=code&client_id=sb-firstapp3cris!t5664&redirect_uri=https%3A%2F%2Fapprouter-p***trial.cfapps.eu10.hana.ondemand.com%2Flogin%2Fcallback# 2018-08-31T15: 38: 00.80 + 0300 [RTR / 5] OUT approuter-p *** trial.cfapps.eu10.hana.ondemand.com - [2018-08-31T12: 38: 00.801 + 0000] "ПОЛУЧИТЬ / hello2 HTTP / 1.1 "200 0 483" https://approuter -p *** trial.cfapps.eu10.hana.ondemand.com/hello2 "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64) ) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 68.0.3440.106 Safari / 537.36 "" "" 2a7ea386c5cc "response_time: 0.003697001 app_id:" 9ceaf8d0-7ee7-4fb2-84d0-05df07af7c01 "app_index:" 0 "x_b3_traceid:" 89e2fc6581f0c47b "x_b3_spanid:" 89ef47_b3p " 2018-08-31T15: 38: 00.80 + 0300 [RTR / 5] OUT

  4. каким-то образом логин вызывается автоматически (я вижу вызов на вкладке index.html, но это происходит, когда я нажимаю кнопку выхода, также нет страницы перенаправления для запроса имени пользователя / пароля): 2018-08-31T15: 38: 39.46 + 0300 [RTR / 5] OUT approuter-p *** trial.cfapps.eu10.hana.ondemand.com - [2018-08-31T12: 38: 39.158 + 0000] "ПОЛУЧИТЬ / login / callback? code = UL6niGFX3T HTTP / 1.1 "302 0 0" https://p***trial.authentication.eu10.hana.ondemand.com/login" "Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 68.0.3440.106 Safari /537.36 "" - "" 10.0.137.79:61038 "x_forwarded_for:" - "x_forwarded_proto:" https "vcap_request_id:" 307eee0f-123f-46f6-7102-9ef370d66ab5 "response_time: 0.307257726 app_id0d0d0: 84: 9_d0d0: 8: 9_d0d4: 8 05df07af7c01 "app_index:" 0 "x_b3_traceid:" a9a073166c04301f "x_b3_spanid:" a9a073166c04301f "x_b3_parentspanid:" - " 2018-08-31T15: 38: 39,46 + 0300 [RTR / 5] OUT

  5. Я нажимаю свою пружинную кнопку из approuter / index.html, и теперь я также получаю 200 ответов: 2018-08-31T15: 38: 39.70 + 0300 [RTR / 1] OUT approuter-p *** trial.cfapps.eu10.hana.ondemand.com - [2018-08-31T12: 38: 39.542 + 0000] "ПОЛУЧИТЬ / hello2 HTTP / 1.1 "200 0 85" p *** trial.authentication.eu10.hana.ondemand.com/login "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 68.0.3440.106 Safari / 537.36 "" - "" 10.0.137.79:61038 "x_forwarded_for:" - "x_forwarded_proto:" https "vcap_request_id:" b6400e34-87c0-47ea-4335-46d9c9348800808: 048: 048: 048: 048: 048: 048: 0488: 048: 048: 0488: 0488: 04848: 08084848: 048: 048488808808808088088080880880808808088080808088080808080808080 »» 080 (080)): 0808808 080 7ee7-4fb2-84d0-05df07af7c01 "app_index:" 0 "x_b3_traceid:" eb6dde02e73d9c38 "x_b3_spanid:" eb6dde02e73d9c38 "x_b3_parentspanid:" - " 2018-08-31T15: 38: 39,70 + 0300 [RTR / 1] OUT 2018-08-31T15: 38: 52.91 + 0300 [RTR / 0] OUT approuter-p *** trial.cfapps.eu10.hana.ondemand.com - [2018-08-31T12: 38: 52.897 + 0000] "ПОЛУЧИТЬ / hello2 HTTP / 1.1 "200 0 85" approuter-p *** trial.cfapps.eu10.hana.ondemand.com/index.html "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML) , как и Gecko) Chrome / 68.0.3440.106 Safari / 537.36 "" "" "10.0.137.79:61038" x_forwarded_for: "-" x_forwarded_proto: "https" vcap_request_id: "a29c59b9-ba64-4249-74ac-dbf_404_f_504" 0364_4404_750_4_50_50_4_50_50_1505_4_150_4_50_4_4_50_4_50_50_50 : "9ceaf8d0-7ee7-4fb2-84d0-05df07af7c01" app_index: "0" x_b3_traceid: "b16f601b3276909a" x_b3_spanid: "b16f601b3276909a" x_b3_parentspanid: "-"2018-08-31T15: 38: 52,91 + 0300 [RTR / 0] OUT

1 Ответ

0 голосов
/ 30 августа 2018

Учитывая ваш xs-app.json и URL-адрес approuter, я предполагаю, что выход находится за:

https://approuter -p *** trial.cfapps.eu10.hana.ondemand.com/my/logout.

Вы вызываете эту конечную точку для выхода из приложения? Это должно сделать недействительными все ваши сеансы, а также временную задержку JWT в памяти приложения.

Более того, когда вы обращаетесь к своему бэкэнду Spring напрямую, вы всегда должны получать коды ошибок 4xx, потому что на самом деле ни у одного клиента нет JWT для доступа к бэкенду, защищенному пружиной. Кроме того, доступ к серверной части на основе Spring должен быть независимым от любых файлов cookie или сеансов, поскольку используется JWT, который по своей конструкции является протоколом без сохранения состояния. Единственный файл cookie сеанса поддерживается между вашим клиентом и приложением.

Подробнее об этом см. В Расширение книги SAP S / 4HANA, глава 5 .

...