在 SAP S/4HANA 中调用 OData 服务时,我们尝试使用客户端证书进行身份验证。我们从一个天蓝色的 APIM 实例调用。作为证书,我们创建了一个自签名证书并根据此博客配置了 SAP S/4HANA ( https://blogs.sap.com/2020/05/03/x.509-certificate-based-logon-to- odata-services/ ) 然后我们从浏览器中测试它,它就像一个魅力。但是从 azure APIM 调用我们会从 SAP S/4HANA 得到以下响应:
<?xml version="1.0" encoding="utf-8"?> <error xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance">
<code>HTTP/404/E/Not Found</code>
<message> Service /sap/opu/odata/sap/xxxxyyyy/xxyyzz call was terminated because the corresponding service is not available.The termination occurred in system UFI with error code 404 and for the reason Not found. Please select a valid URL. If it is a valid URL, check whether service /sap/opu/odata/sap/xxxxyyyy/xxyyzz is active in transaction SICF. If you do not yet have a user ID, contact your system administrator. </message>
SAP S/4HANA 支持表示,然后从浏览器调用他们可以“看到”有效负载中的证书,但随后从 APIM 调用,有效负载是“空的”。
我从 SAP S/4HANA 网关服务器获得了跟踪日志,并且我注意到从浏览器调用与从 APIM 调用的细微差别:
浏览器调用(成功):[Thr 140708195055360] HttpModGetDefRules:确定缺陷:COPY_CERT_TO_MPI (1)
APIM 调用(失败):[Thr 140708197697280] HttpModGetDefRules:确定了缺陷:NOTHING (0)
所以证书显然是到达 SAP S/4HANA 网关服务器,而不是 SAP S/4HANA Odata 服务器。所以不知何故,由于某种原因,它在 SAP S/4HANA 网关服务器上丢失了,然后它来自 azure APIM。
我试图使调用 100% 相同(相同的标头相同的值),但我无法控制在 azure apim 中添加证书的方式,或者可以一个?
我读到可以使用以下策略设置证书正文:
<authentication-certificate body="@(context.Variables.GetValueOrDefault<byte[]>("byteCertificate"))" password="optional-certificate-password" />
但我不知道如何获得“byteCertificate”的正确值。
有人做过吗?或者有没有人遇到过类似的问题?