MobileFirst SAP 适配器 http HEAD 请求

MobileFirst SAP Adapter http HEAD requests

我们在 RHEL linux 上使用 MobileFirst 6.3,mobilefirst 服务器 运行。我们连接到 SAP 并使用 Discovery 生成适配器代码,并使用那些生成的适配器调用来进行自定义身份验证。如果我们对 SAP 进行创建,将导致 http POST 请求,但适配器总是在该实际请求之前生成一个 http HEAD 请求。我有 SAP 后端人员抱怨这些(并不是我个人认为它们会造成很大伤害)。我在使用 wireshark 检查其他东西时也确认了这些。我可以想象它们会与适配器进行的某种类型的连接检查有关,但无法找到任何证据。搜索类似的问题也很有挑战性,因为 HTTP 和 HEAD 字符串在 url 和 html 代码中很常见。

适配器定义:

..
    <connectivity>
            <connectionPolicy xsi:type="nwgateway:NWGatewayHTTPConnectionPolicyType">
                    <protocol>HTTP</protocol>
                    <domain>our.complex.host</domain>
                    <port>10084</port>
                    <connectionTimeoutInMilliseconds>30000</connectionTimeoutInMilliseconds>
                    <socketTimeoutInMilliseconds>30000</socketTimeoutInMilliseconds>
                    <serviceRootUrl>/sap/opu/odata/sap/OUR_CUSTOM_REQS/</serviceRootUrl>
                    <!-- Following properties used by adapter's key manager for choosing specific certificate from key store  
                    <sslCertificateAlias></sslCertificateAlias> 
                    <sslCertificatePassword></sslCertificatePassword>-->
                    <maxConcurrentConnectionsPerNode>50</maxConcurrentConnectionsPerNode>           
            </connectionPolicy>
    </connectivity>

..
    <procedure name="createOurCustomObjectHeader" securityTest="OurCustomSecurityTest" connectAs="endUser"/>
..

适配器代码:

function createOurCustomObjectHeader(content) {
    var request = {
            CollectionName: "OurCustomObjectHeaderSet",
            Content : content
    };
    return WL.Server.createNWBusinessObject(request);
}

安全测试代码:

    <customSecurityTest name="OurCustomSecurityTest">
        <test realm="wl_antiXSRFRealm" />
        <!--  test realm="wl_authenticityRealm"/ -->
        <test realm="wl_remoteDisableRealm" />
        <test realm="OurCustomRealm" isInternalUserID="true" />
        <test realm="wl_deviceNoProvisioningRealm" isInternalDeviceID ="true" />
    </customSecurityTest>

查看代码后,我们似乎使用 HEAD 请求从网关获取 CSRF-Token,然后将该令牌插入到实际创建请求的 header 中。如果您参考 SAP's documentation,出于安全目的,所有修改操作都需要 CSRF 令牌 header。

在MobileFirst 6.3甚至更高版本中,由于SAP Gateway基础架构的规定,恐怕无法绕过此配置。