Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sapui5 将SCP云用户信息安全地传输到ABAP_Sapui5_Abap_Sap Cloud Platform - Fatal编程技术网

Sapui5 将SCP云用户信息安全地传输到ABAP

Sapui5 将SCP云用户信息安全地传输到ABAP,sapui5,abap,sap-cloud-platform,Sapui5,Abap,Sap Cloud Platform,我在SAP NEO上有一个UI5应用程序,它通过ABAP OData服务检索数据 用户在SAP Cloud Identity中进行维护,并与其后端用户进行映射,登录通过主体传播进行设置。这是所有的设置和工程 我被要求更改该应用程序,以使没有SAP后端用户的外部销售代表能够使用该应用程序 其思想是使用一个具有基本身份验证的“技术用户”,而不是主体传播 我的问题是如何在ABAP中识别原始云用户名(因为有一个技术用户) 在ABAP中调试没有显示原始信息,我担心原始用户甚至没有被传递到网关 SAP C

我在SAP NEO上有一个UI5应用程序,它通过ABAP OData服务检索数据

用户在SAP Cloud Identity中进行维护,并与其后端用户进行映射,登录通过主体传播进行设置。这是所有的设置和工程

我被要求更改该应用程序,以使没有SAP后端用户的外部销售代表能够使用该应用程序

其思想是使用一个具有基本身份验证的“技术用户”,而不是主体传播

我的问题是如何在ABAP中识别原始云用户名(因为有一个技术用户)

  • 在ABAP中调试没有显示原始信息,我担心原始用户甚至没有被传递到网关

  • SAP Cloud User API()不是一个选项,因为请求可以在浏览器中操作

  • 我听说过另一个使用Javaservlet的选项。但我担心这意味着我们必须在那里重新设置整个OData服务,随着网关的每一次更改,我们也必须调整Javaservlet,或者可能有一个代理

如果您使用的是SAP云平台的移动服务,您可以激活一个带有用户名的标题,以传输到您的ABAP系统。它被称为X-SMP-ENDUSERNAME


参考

中的文档,我假设您可以在UI5应用程序中获取云用户ID,如果您通过Odata模型访问后端,您可以使用ODataModel.setHeaders函数提供自定义请求头,该头将附加到发送到后端的每个请求。我会尝试在一些自定义头值中发送云用户id

在ABAP端,您可以在服务实现中使用DP facade接口来读取自定义头:

lo_facade ?= /iwbep/if_mgw_conv_srv_runtime~get_dp_facade( ).
lt_client_headers = lo_facade->get_request_header( ).

不幸的是,我们没有为这个应用程序使用移动服务,它是直接托管的。这个ENDUSERNAME头正是我所需要的,但是在一个标准的HTML5应用程序中。运行移动服务需要少量的许可费,但对于这种情况来说,它是一个非常简单的配置。探索的另一个选项是从SCP向SAP网关运行OAuth,并将一些断言属性映射到主属性。我不确定你是否真的在DPC课程中得到了它们。我对移动服务不是很有经验。但我认为是本地或混合应用程序。使用这种方法,是否仍有可能上传UI5应用程序并获得浏览器的正常链接?这应该像一个普通的HTML5页面一样运行,而不是在容器中或作为一个应用程序运行。是的。有一个登录过程,其中每个设备/用户都得到注册,但除此之外,它只是目的地的另一个URL。您不必使用脱机功能。你可以在《邮递员》中进行测试。谢谢Mikael,我终于理解了这种方法,而且效果非常好:)。我使用Propagate用户名创建了一个新应用程序,将我应用程序中的目标更改为Mobile Services API,并能够在后端获取用户。可以在UI5应用程序中获取用户并将其添加到标头。但是,此选项不会被篡改。例如,可以在Chrome开发工具中操作标题。是否使用定期更改的密钥加密标题?这不是一种治疗方法,但至少可以让坏人慢下来一会儿。不确定这是否是答案,但您可能可以使用断言属性和主体传播,并使用它来传输原始用户id?请看这里: