如何在SAP PO中存储和检索OAUTH令牌?

2020-08-22 19:46发布

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

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


专家您好,

在这种情况下,我可能需要您的宝贵意见/建议:

"从WS客户端发送了新的访问令牌刷新令牌,SAP PO 使用发件人REST轮询每20分钟轮询一次(令牌每30分钟过期一次),然后 接收到的令牌需要存储

轮询输出类似:

{

" access_token ":" w05ssdc5-f441-492b-978f-82db88a21ccb2",

" refresh_token ":" 115s3dc5-f441-492b-978f-82db88a21ccb2",

"作用域":" givenName邮件随机数openid个人资料sn uid",

" token_type":"承载者",

" expires_in":1799

}

现在至关重要的是,我想将令牌存储在SAP PO中,然后检索以调用实际的业务接口。

这将帮助我避免进行多次API身份验证调用(也存在API限制)来运行实际的业务接口,而只需从查找表或某些属性或brm或任何属性中检索令牌即可。

通过值映射和NWA应用程序属性实现,但似乎在安全性和增量缓存问题方面存在局限性。 没有ECC或任何数据库系统甚至都无法进行查找。

期待更好的解决方案。 非常感谢!

此致

Rajesh PS

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

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


专家您好,

在这种情况下,我可能需要您的宝贵意见/建议:

"从WS客户端发送了新的访问令牌刷新令牌,SAP PO 使用发件人REST轮询每20分钟轮询一次(令牌每30分钟过期一次),然后 接收到的令牌需要存储

轮询输出类似:

{

" access_token ":" w05ssdc5-f441-492b-978f-82db88a21ccb2",

" refresh_token ":" 115s3dc5-f441-492b-978f-82db88a21ccb2",

"作用域":" givenName邮件随机数openid个人资料sn uid",

" token_type":"承载者",

" expires_in":1799

}

现在至关重要的是,我想将令牌存储在SAP PO中,然后检索以调用实际的业务接口。

这将帮助我避免进行多次API身份验证调用(也存在API限制)来运行实际的业务接口,而只需从查找表或某些属性或brm或任何属性中检索令牌即可。

通过值映射和NWA应用程序属性实现,但似乎在安全性和增量缓存问题方面存在局限性。 没有ECC或任何数据库系统甚至都无法进行查找。

期待更好的解决方案。 非常感谢!

此致

Rajesh PS

付费偷看设置
发送
12条回答
当学会了学习
1楼 · 2020-08-22 20:04.采纳回答

解决了在文件服务器,值映射,消息ID映射器自定义模块解决方案中成功保存令牌的问题。

最后得到了一个OAuth标准解决方案,该解决方案可以按预期运行,并且确实不错。 这是在SAP PO 7.4 SPS16补丁15中实现的。

https://blogs.sap.com/2020/02/29/oauth-2.0-standard-solution-with-grant- 在ap-po-7.5中输入密码为最新更新/comment-page-1/#comment-497164

哎,真难
2楼-- · 2020-08-22 20:17

嗨Rajesh,

如果存在缓存问题,则可以继续使用 Evgeniy Kolmakov 方法,即存储 某些安全文件或PO表中的值。 但是您必须与BASIS核对访问路径或表的信息

谢谢

Ankit。

clasier
3楼-- · 2020-08-22 20:12

嗨,

遗憾的是,无法刷新令牌。 我发现 Evgeniy Kolmakov 解决方案足够合适。

悲伤,但这里没有很多优化的解决方案。/p>

致谢

Vikas

Haoba3210
4楼-- · 2020-08-22 20:09

嗨,拉杰什,

这是一个好问题。 我实际上以为REST接收器适配器本身会缓存令牌(有一个复选框)。 您是否不使用此适配器,或者它不满足您的要求?

我有一个类似的要求,但是对于SOAP API,我必须在SOAP Header中传递令牌。 我编写了一个UDF,它在第一个请求中获取令牌,并将其与时间戳一起存储在值映射缓存中。 在随后的请求中,它将加载时间戳并将时间戳与当前时间进行比较,并且仅在缓存的令牌已过期的情况下才提取新令牌(可以将有效期(分钟)配置为模块参数)。 我不认为VM存储有安全风险,因为对VM缓存监视器的访问仅限于PO管理员,并且该方案不包含机密数据。 但是也许也可以考虑对存储的令牌进行加密?

无论如何,您正在寻找另一种方法。 因此,如果您还不了解,这可能会有所帮助:我最近遇到了一篇有关该主题的非常有趣的文章,该文章似乎使用了一个称为MessageIDMapper的内部PO类,到目前为止我还不了解。 该解决方案利用这些方法将令牌存储到PO内部表中。 也许有帮助。

Philippe

jovirus
6楼-- · 2020-08-22 19:57

嗨Rajesh

由于我没有寻求该解决方案,因此我无法真正回答前两个问题。 使用MessageID映射器后,是否检查表XI_AF_SVC_ID_MAP的内容? 应该可以在NWA的开放式SQL浏览器中看到它,但是我的系统上没有它的授权。

关于删除作业:您是指IDmapper的有效时间吗? 创建新实例时,您必须传递时间戳。 稍后,您可以运行方法removeExpiredIDMaps来删除过期的条目(请参阅https://help.sap.com/doc/2f39047ed6b141cb83658041d2d4e029/7.5.8/en-US/PI/com/sap/aii/af/ service/idmap/MessageIDMapper.html )。

一周热门 更多>