0

在 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”的正确值。

有人做过吗?或者有没有人遇到过类似的问题?

4

1 回答 1

1

我们终于找到了解决方案!感谢 microsoft APIM 支持团队,非常感谢 :)

APIM 充当反向代理并添加与此角色相关的标头。标头“X-Forwarded-For”导致 SAP 拒绝带有上述误导性错误消息的请求。我们找到了 SAP 可以配置的解决方案:

ICM 参数“icm/HTTPS/accept_ccert_for_x_forwarded_for_requests”必须设置为“true”——默认设置为“false”。

(不能使用 APIM 端的策略删除标头。)

于 2021-08-16T08:04:28.137 回答