Безопасная передача информации о пользователе SCP Cloud на ABAP

У меня есть приложение UI5, размещенное на SAP NEO, которое извлекает данные через службу ABAP OData.

Пользователи поддерживаются в SAP Cloud Identity и сопоставляются с их Backenduser, а вход в систему настраивается через принцип распространения. Это все настроено и работает.

Меня попросили изменить приложение, чтобы позволить внешним торговым представителям без серверных пользователей SAP использовать приложение.

Идея состоит в том, чтобы использовать одного «технического пользователя» с базовой аутентификацией вместо основного.

У меня вопрос: как определить исходное имя пользователя Cloud в ABAP (поскольку sy-uname будет техническим пользователем).

  • Отладка в ABAP не раскрыла исходную информацию, и я боюсь, что исходный пользователь даже не передан на шлюз

  • Пользовательский API SAP Cloud (

    person Daniel    schedule 03.08.2019    source источник


Ответы (2)


Если вы используете мобильные службы SAP Cloud Platform, вы можете активировать заголовок с именем пользователя, которое будет перенесено в вашу систему ABAP. Он называется X-SMP-ENDUSERNAME.

См. Документацию на https://help.sap.com/viewer/38dbd9fbb49240f3b4d954e92335e670/Cloud/en-US/defdadb71ee2476691d987689e3703a2.html

person Mikael G    schedule 04.08.2019
comment
К сожалению, мы не используем мобильные службы для этого приложения, оно размещается напрямую. Этот заголовок ENDUSERNAME был бы именно тем, что мне нужно, но в стандартном приложении HTML5. - person Daniel; 05.08.2019
comment
За использование мобильных служб взимается небольшая плата за лицензию, но в данном случае это очень простая конфигурация. Другой вариант для изучения - запустить OAuth к шлюзу SAP из SCP и сопоставить некоторые атрибуты утверждения с основными атрибутами. Хотя не уверен, действительно ли вы получаете их в классе DPC. - person Mikael G; 06.08.2019
comment
Я не слишком разбираюсь в мобильных сервисах. Но я думал, что это для нативных или гибридных приложений. Можно ли при таком подходе загрузить туда приложение UI5 и получить обычную ссылку для браузера? Он должен вести себя как обычная страница HTML5, а не запускаться в контейнере или в качестве приложения. - person Daniel; 07.08.2019
comment
да. Существует процесс регистрации, при котором каждое устройство / пользователь регистрируется, но в остальном это просто еще один URL-адрес для пункта назначения. Вам не обязательно использовать офлайн-возможности. Вы можете проверить это в Postman. - person Mikael G; 07.08.2019
comment
Адаптация - это не то, о чем я могу рассказать здесь. Ожидается, что приложение UI5 будет работать через ссылку на браузер без необходимости установки приложения. А также то, что новых пользователей можно легко подключить, просто активировав их в Identity Provider. - person Daniel; 08.08.2019
comment
Подключение происходит автоматически. Просто попробуйте в пробной учетной записи, если у вас нет лицензии? - person Mikael G; 08.08.2019
comment
Спасибо, Микаэль, я наконец понял подход, и он работает очень хорошо :). Я создал новое приложение с именем пользователя для распространения, изменил место назначения в своем приложении на API мобильных служб и смог получить пользователя в бэкэнде. - person Daniel; 09.08.2019

Я предполагаю, что вы можете получить облачный идентификатор пользователя в своем приложении UI5, и в случае, если вы обращаетесь к бэкэнду через модель Odata, вы можете использовать функцию ODataModel.setHeaders для предоставления ваших пользовательских заголовков запросов, которые будут прикрепляться к каждому запросу, отправляемому в бэкэнд. Я бы попытался отправить идентификатор пользователя облака в некотором настраиваемом значении заголовка.

А на стороне ABAP вы можете использовать интерфейс фасада DP в реализации службы для чтения пользовательских заголовков:

lo_facade ?= /iwbep/if_mgw_conv_srv_runtime~get_dp_facade( ).
lt_client_headers = lo_facade->get_request_header( ).
person slkorolev    schedule 04.08.2019
comment
Можно было бы получить пользователя в приложении UI5 и добавить его в заголовок. Однако этот вариант не будет защищен от взлома. Заголовками можно управлять, например, в Chrome Dev Tools. - person Daniel; 05.08.2019
comment
Шифровать заголовки периодически меняющимся ключом? Не лекарство, но, по крайней мере, может на мгновение замедлить плохих парней. - person slkorolev; 05.08.2019
comment
Не уверен, что это может быть ответ, но, вероятно, вы можете использовать атрибут Assertion с основным распространением и использовать его для передачи исходного идентификатора пользователя? См. Здесь: blogs.sap.com/2019/05/28/ - person slkorolev; 05.08.2019