如何保护SAPUI5 App中的OData API密钥?

2020-08-18 00:47发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨社区

我正在使用几个API,这些API借助API密钥进行身份验证,该API密钥用于检索用于后续API查询(SuccessFactors LMS OData和SAP LiveLink)的令牌。 我可以请求令牌并通过SAPUI5应用程序中的ajax请求和在Cloud Platform中配置的目标进行查询。

我担心的是,这些密钥目前存储在SAPUI5应用程序中,并在检索令牌时作为标头附加到ajax请求。 我不希望以这种方式存储它们,因为据我所知,无法从客户端隐藏此信息。

我一直在研究一些想法,但是找不到任何可行的信息或文档来支持这些想法。

1。 我想知道是否可以将API密钥添加到Cloud Platform Cockpit中的目标,以便每次在SAPUI5应用程序中使用目标时都将它们作为标头自动发送。

2。 可以将其存储在neo-app.json文件中吗? 由于可以限制对此文件的访问。

或者只有一种真正的选择,那就是拥有用于检索API令牌的服务器端解决方案? 我宁愿避免减少加载时间和架构依赖性。

我希望有人以前曾经遇到过这个问题,并且可以分享一个好的解决方案:)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨社区

我正在使用几个API,这些API借助API密钥进行身份验证,该API密钥用于检索用于后续API查询(SuccessFactors LMS OData和SAP LiveLink)的令牌。 我可以请求令牌并通过SAPUI5应用程序中的ajax请求和在Cloud Platform中配置的目标进行查询。

我担心的是,这些密钥目前存储在SAPUI5应用程序中,并在检索令牌时作为标头附加到ajax请求。 我不希望以这种方式存储它们,因为据我所知,无法从客户端隐藏此信息。

我一直在研究一些想法,但是找不到任何可行的信息或文档来支持这些想法。

1。 我想知道是否可以将API密钥添加到Cloud Platform Cockpit中的目标,以便每次在SAPUI5应用程序中使用目标时都将它们作为标头自动发送。

2。 可以将其存储在neo-app.json文件中吗? 由于可以限制对此文件的访问。

或者只有一种真正的选择,那就是拥有用于检索API令牌的服务器端解决方案? 我宁愿避免减少加载时间和架构依赖性。

我希望有人以前曾经遇到过这个问题,并且可以分享一个好的解决方案:)

付费偷看设置
发送
6条回答
spaceman01
1楼 · 2020-08-18 01:27.采纳回答

您是在谈论仅在浏览器中运行的UI5应用程序吗? 然后,此密钥不应保留在那里。 我认为我在此处上找到的SF LMS OData API >更适合由中间件(即在SCP上运行并可以安全存储API密钥的Node.js oder Java应用程序)使用。

SC_Yao
2楼-- · 2020-08-18 01:22

Hi Gregor,

是的,我们正在研究仅在浏览器中运行的UI5应用程序。

我希望密钥可以保留在应用程序使用的目标位置。 但是,如果这不可能,那么是的,我认为回退将是SCP上的Java应用程序,该应用程序可以为应用程序提供发出请求或原始数据的令牌。

昵称总是被占用
3楼-- · 2020-08-18 01:32

嗨,亚当,

在SCP上开发SAPU5I应用程序时遇到了同样的问题。 您找到隐藏该API密钥的方法了吗? 也许使用目的地? 这些天,我一直在搜索很多东西,但没有找到任何可以帮助我的东西。

谢谢

杰拉德

何必丶何苦呢
4楼-- · 2020-08-18 01:10

嗨杰拉德,

我们最终创建了一个Java servlet来处理令牌的生成。


关于亚当

SAP德到
5楼-- · 2020-08-18 01:19

嗨亚当,

在manifest.json文件中输入数据就足够了吗?

这样做,您将在调用" mainService"时从HTML源(AJAX调用)隐藏APIKey。 SAPUI5框架将在运行时注入APIKey。 但是,如果您检查从服务器下载的资源,则仍然可以"看到" APIKey。 如果您尝试将其隐藏在目标属性下,将是相同的。

如果必须保护APIKey,那么将另一种类型的验证(例如IP地址,用户名等)与APIKey一起使用也许更有意义-只有您知道这种组合。 因此,即使有人发现了您的APIKey,该请求也不会起作用。

在请求的其他方面都无法满足的情况下,您可以调查OAuth而不是APIKey的用法。

以下是代码段:

"数据源":{
 " mainService":{
 " uri":"/Northwind/V2/Northwind/Northwind.svc/",
 " type":" OData",
 "设置":{
 " localUri":" localService/metadata.xml",
 " metadataUrlParams":{
 " sap-documentation":"标题"
 },
 "标题":{
 " APIKey":" LeQAyRqelY5mW6GhgxgK4DY9il73I0aB"
 }
 }
 },
 }
 

关于,
伊凡

路亽曱_Ryan
6楼-- · 2020-08-18 01:15

嗨,格雷格,

感谢您向我指出。 你是对的。 这不是保护API密钥的方法。
实际上,没有任何方法可以保护基于JavaScript的应用程序中的API密钥。

保护API密钥的唯一方法是将其隐藏在另一个服务器端服务下。 客户端呼叫将始终对公众"可见"。 因此,它们不得包含任何敏感信息,例如密码或密钥-我的回答中也明确指出了这一点。

我想提醒我,我的真正建议是用OAuth替换API密钥-OAuth使用与API不同的身份验证方法-用户将自己向API提供程序提供身份验证,一旦成功,应用程序将检索临时密钥 令牌。

关于,
伊凡

一周热门 更多>