【问题标题】:Missing CSRF Token Android App with SAP Netweaver GatewaySAP Netweaver 网关缺少 CSRF 令牌 Android 应用程序
【发布时间】:2020-12-27 07:57:21
【问题描述】:

我正在做一个 Android 应用程序,它使用 Java 中的 SAP Gateway 使用 OData。此时,我可以从网关检索数据,但是当我想更新或创建某些内容时,会出现“预期状态正常或无内容”的错误......我在互联网上阅读,我需要在 GET 中检索 CSRF 令牌并将其设置为 post 和 put 操作.... 如何在使用 SAP Gateway 中的 OData 并使用 OData4j 的 android 应用程序中执行此操作?我创建消费者的代码是这样的:

            ODataConsumer consumer = ODataConsumers.create(serviceUrl);
            ODataConsumer.Builder builder = ODataConsumers.newBuilder(serviceUrl);
            builder.setClientBehaviors(new BasicAuthenticationBehavior("myuser", "mypass")); 
            consumer = builder.build();

如您所见,我有基本的身份验证,但它错过了 csrf 令牌......

我希望你能帮助我。

非常感谢,

博尔哈。

【问题讨论】:

  • 您找到解决方案了吗?如果你能解决,请分享你的知识

标签: android odata csrf sap-gateway


【解决方案1】:

设置builder对象的客户端行为时,传递参数BasicAuthenticationBehavior对象,传递新的SAPCSRFBehaviour对象..

builder.setClientBehaviors(new BasicAuthenticationBehavior(serviceLocation.getUserName(), serviceLocation.getPassword()), new SAPCSRFBehaviour());

How to handle CSRF tokens while consuming Gateway services using odata4j

【讨论】:

  • 嗨,斯科特,我试过这个选项,但它不适合我。当我设置客户端行为并传递 SAPCSRFBehaviour 对象时,网关响应 403 错误“禁止”。我们可以通过以下帖子解决问题:scn.sap.com/docs/DOC-54896 现在,无需设置 SAPCSRFBehaviour 对象。我们只需要设置这个头:request = request.header("X-Requested-With", "XMLHttpRequest") .header("Authorization", "Basic" + encoded);无论如何,非常感谢 ;) Borja
【解决方案2】:

您需要首先调用设置了标头的 odata 服务以获取令牌。 然后你使用令牌拨打电话。

**request = request.header("X-CSRF-Token", "Fetch")**  

如果跨脚本攻击令牌使用处于活动状态,默认情况下,您必须执行此调用 首先。

使用 getway 测试调用工具,或任何运行 ODATA 调用并跟踪调用的 UI5 应用,您将看到发送的令牌请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 2017-01-08
    • 2019-06-01
    • 1970-01-01
    • 2013-12-02
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多