SAP Cloud SDKを使用するときにCSFRトークンの必要性を処理するにはどうすればよいですか?

インカー

SAP Cloud SDK for Javaを使用して、S / 4のSalesOrderAPIでCRUDを実行しています。Postmanからこれらのアクションを実行できるという点で、すべてがうまく機能します。ただし、Postmanからのこれらのリクエストは、このブログ投稿で概説されているように、csrfトークンを取得するための事前リクエストスクリプトを含める場合にのみ機能します。

ブログ投稿で概説されている事前リクエストスクリプトなしでリクエストを実行すると、「403Forbidden」が表示されます。私が言ったように、これはPostmanから機能しますが、たとえば別のアプリケーションから要求を行っている場合など、このスクリプトを必要とせずにこれを処理する方法を理解したいと思います。SDKを使用すると、アプリケーションコードからこれをなんとかして処理できますか?多分私は何かが欠けています。

御時間ありがとうございます。

編集:私はPostmanから直接S / 4にリクエストを行っていません。CloudSDKを使用してS / 4にリクエストを送信するアプリをデプロイしました。事前リクエストスクリプトを使用してCSFRトークンをフェッチし、送信する前にリクエストに添付すると機能しますが、そうでない場合は403です。したがって、Postmanを使用していないが、フォームに入力してこのリクエストを送信するためにUIを使用していると想像した場合、あなたが提案したように、このトークンについて心配する必要はないということを理解しています。 SDKとVDMがこれを処理するはずです。これは私が理解するのに苦労していることです。ここに画像の説明を入力してください

これはサーブレットコードです。

@Override
protected void doPost(final HttpServletRequest request, final HttpServletResponse response)
        throws ServletException, IOException {

    String body = IOUtils.toString(request.getReader());
    JSONObject so = new JSONObject(body);
    String distributionChannel = so.get("DistributionChannel").toString();
    String salesOrderType = so.get("SalesOrderType").toString();
    String salesOrganization = so.get("SalesOrganization").toString();
    String soldToParty = so.get("SoldToParty").toString();
    String organizationDivision = so.get("OrganizationDivision").toString();
    String material = so.get("Material").toString();
    String requestedQuantityUnit = so.get("RequestedQuantityUnit").toString();

    SalesOrderItem salesOrderItem = SalesOrderItem.builder()
    .material(material)
    .requestedQuantityUnit(requestedQuantityUnit).build();

    SalesOrder salesOrder = SalesOrder.builder()
    .salesOrderType(salesOrderType)
    .distributionChannel(distributionChannel)
    .salesOrganization(salesOrganization)
    .soldToParty(soldToParty)
    .organizationDivision(organizationDivision)
    .item(salesOrderItem)
    .build();

    try {
        final ErpHttpDestination destination = DestinationAccessor.getDestination(DESTINATION_NAME).asHttp()
                .decorate(DefaultErpHttpDestination::new);
        final SalesOrder storedSalesOrder = new CreateSalesOrderCommand(destination, new DefaultSalesOrderService(),
                salesOrder).execute();
        response.setStatus(HttpServletResponse.SC_CREATED);
        response.setContentType("application/json");
        response.getWriter().write(new Gson().toJson(storedSalesOrder));
        logger.info("Succeeded to CREATE {} sales order", storedSalesOrder);

    } catch (final Exception e) {
        response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        logger.error(e.getMessage(), e);
        logger.error("Failed to CREATE sales order", e);
    }
}

そして、CreateSalesOrderコマンド:

public SalesOrder execute() {
    return ResilienceDecorator.executeSupplier(this::run, myResilienceConfig);
}

protected SalesOrder run() {
    try {
        return salesOrderService.createSalesOrder(salesOrder).execute(destination);
    } catch (final ODataException e) {
        throw new ResilienceRuntimeException(e);
    }
}

SDKのバージョン3.16.1を使用しており、マニフェストでSDKのログレベルをDEBUGに設定しています。

SET_LOGGING_LEVEL: '{ROOT: INFO, com.sap.cloud.sdk: DEBUG}'

ログバックでDEBUGへのログレベル

リクエストからプレリクエストスクリプトを削除して送信すると、403レスポンスが返され、ログに次のメッセージが表示されます。

"logger": "com.sap.cloud.sdk.service.prov.api.security.AuthorizationListener"、 "thread": "http-nio-0.0.0.0-8080-exec-4"、 "level": "DEBUG "、" category ":[]、" msg ":"ユーザープリンシパルの読み取り "

"logger": "com.sap.cloud.sdk.service.prov.api.security.AuthorizationListener"、 "thread": "http-nio-0.0.0.0-8080-exec-4"、 "level": "DEBUG "、" category ":[]、" msg ":"リクエストが終了したため、承認を破棄しています。 " }

"logger": "com.sap.cloud.sdk.service.prov.api.security.AuthorizationService"、 "thread": "http-nio-0.0.0.0-8080-exec-4"、 "level": "DEBUG "、" category ":[]、" msg ":"認証JWTトークンを破棄しています。 " }

クリストフシューベルト

他の回答はアプリからS / 4への通信に焦点を当てており、ユーザー(Postmanなど)からアプリへの通信を意味することを明確にするために質問を調整したので、いくつかの追加情報を提供します。

他の回答で述べたように、S / 4システム(または任意のODataエンドポイント)へのCSRF処理は、ODataVDM側で自動的に処理されます。

現在発生しているのは、SAP Cloud SDK Maven Archetypesの安全なデフォルト構成であり、RestCsrfPreventionFilterデフォルトでアクティブ化されています。このフィルターはGET、リクエストの前にCSRFトークンをフェッチするように要求することで、すべての非エンドポイントをCSRFから自動的に保護します。これは、バックグラウンドでのS / 4システムへのODataVDM呼び出しとはまったく関係ありません。

問題を解決するために、次の3つのステップがあります。

  • GET代わりにエンドポイントを使用するPOST
    • おそらく一時的な回避策としてのみ
  • RestCsrfPreventionFilter一時的に削除しますweb.xml
    • これは生産的な使用のために行われるべきではありませんが、初期評価でのあなたの生活を楽にするかもしれません。
  • 「それと一緒に暮らす」
    • これはCSRFからアプリケーションを保護するために一般的に使用されるパターンであるため、フィルターを所定の位置に保持し、必要に応じてCSRFトークンの「フロー」を実行することをお勧めします。

参考文献

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SAP S / 4HANA Cloud SDKパイプラインの障害と警告のしきい値を変更するにはどうすればよいですか?

分類Dev

SAP Cloud SDK for javascriptのDocumentInfoRecordget()呼び出しからeTag(MetaData)を取得するにはどうすればよいですか?

分類Dev

SAP Cloud SDKバージョン3.2.0を使用してPOSTリクエストをODataサービスに送信するときにDestinationAccessExceptionを回避する方法

分類Dev

SAP Cloud SDK Spring Security JARS

分類Dev

Google Cloud Functionsでシークレットを処理するにはどうすればよいですか?

分類Dev

SAP Cloud SDK VDM GeneratorはEDMXアノテーションを正しく処理していますか?

分類Dev

Google Cloud Functionsにデプロイするときにキーと認証情報を処理するにはどうすればよいですか?

分類Dev

Google Cloud SQL JDBC Driverを使用しているときにOAuthトークンを更新するにはどうすればよいですか?

分類Dev

windevのSAPスクリプトを使用するにはどうすればよいですか?

分類Dev

SAP Cloud Platform Integration(SCPI)を使用して、HybrisをSAP forRetailに統合します

分類Dev

Cloud Foundry APIを使用してトークンを取得するにはどうすればよいですか?

分類Dev

SAPとvbaを使用してデータを変更するにはどうすればよいですか?

分類Dev

SAP Cloud Platform SDK for Android-Macにインストールすると、AndroidStudioが見つかりません

分類Dev

SAP との統合を無料でテストするにはどうすればよいですか?

分類Dev

SAP UI5でnullになる可能性のある属性でリストをグループ化するにはどうすればよいですか?

分類Dev

Google Cloud PlatformのGo SDKを使用してプロジェクトのメタデータを取得するにはどうすればよいですか?

分類Dev

sap.uxap.ObjectPageLayout:ロード時にデフォルトのセクションページを設定するにはどうすればよいですか?

分類Dev

SAP HANAStudio内にRrandomForestオブジェクトを保存するにはどうすればよいですか?

分類Dev

Google Cloud Firestoreからすべてのドキュメントを取得しようとしたときにタイムアウトエラーに対処するにはどうすればよいですか?

分類Dev

Amazon Cloud Driveアクセストークンを取得するにはどうすればよいですか?

分類Dev

SAP Cloud SDKを使用して拡張エンティティでフィルターを実行する

分類Dev

SAPのテーブルIDを知るにはどうすればよいですか?VBAを使用してSAPからデータを読み取ります

分類Dev

UnityでFirebase Cloud Messagingを使用しているときに現在のアクティビティを取得するにはどうすればよいですか?

分類Dev

SAP Cloud SDK(Java)がSuccessFactorsメタデータのロード時に命名エラー例外をスローする

分類Dev

Google Cloud Datastore Pythonライブラリを使用するときにメモリリークを調査するにはどうすればよいですか?

分類Dev

SAP VBAマクロで現在の行を選択するにはどうすればよいですか?

分類Dev

カーソルを合わせたときにsap.m.tableセルの境界を強調表示するにはどうすればよいですか?

分類Dev

VBAでSAPGUIスクリプティングを使用する場合、IntelliSenseのように、コーディング中にSAP GUIオブジェクトのプロパティを表示するにはどうすればよいですか?

分類Dev

SAP LeonardoのAPI翻訳を使用するにはどうすればよいですか?

Related 関連記事

  1. 1

    SAP S / 4HANA Cloud SDKパイプラインの障害と警告のしきい値を変更するにはどうすればよいですか?

  2. 2

    SAP Cloud SDK for javascriptのDocumentInfoRecordget()呼び出しからeTag(MetaData)を取得するにはどうすればよいですか?

  3. 3

    SAP Cloud SDKバージョン3.2.0を使用してPOSTリクエストをODataサービスに送信するときにDestinationAccessExceptionを回避する方法

  4. 4

    SAP Cloud SDK Spring Security JARS

  5. 5

    Google Cloud Functionsでシークレットを処理するにはどうすればよいですか?

  6. 6

    SAP Cloud SDK VDM GeneratorはEDMXアノテーションを正しく処理していますか?

  7. 7

    Google Cloud Functionsにデプロイするときにキーと認証情報を処理するにはどうすればよいですか?

  8. 8

    Google Cloud SQL JDBC Driverを使用しているときにOAuthトークンを更新するにはどうすればよいですか?

  9. 9

    windevのSAPスクリプトを使用するにはどうすればよいですか?

  10. 10

    SAP Cloud Platform Integration(SCPI)を使用して、HybrisをSAP forRetailに統合します

  11. 11

    Cloud Foundry APIを使用してトークンを取得するにはどうすればよいですか?

  12. 12

    SAPとvbaを使用してデータを変更するにはどうすればよいですか?

  13. 13

    SAP Cloud Platform SDK for Android-Macにインストールすると、AndroidStudioが見つかりません

  14. 14

    SAP との統合を無料でテストするにはどうすればよいですか?

  15. 15

    SAP UI5でnullになる可能性のある属性でリストをグループ化するにはどうすればよいですか?

  16. 16

    Google Cloud PlatformのGo SDKを使用してプロジェクトのメタデータを取得するにはどうすればよいですか?

  17. 17

    sap.uxap.ObjectPageLayout:ロード時にデフォルトのセクションページを設定するにはどうすればよいですか?

  18. 18

    SAP HANAStudio内にRrandomForestオブジェクトを保存するにはどうすればよいですか?

  19. 19

    Google Cloud Firestoreからすべてのドキュメントを取得しようとしたときにタイムアウトエラーに対処するにはどうすればよいですか?

  20. 20

    Amazon Cloud Driveアクセストークンを取得するにはどうすればよいですか?

  21. 21

    SAP Cloud SDKを使用して拡張エンティティでフィルターを実行する

  22. 22

    SAPのテーブルIDを知るにはどうすればよいですか?VBAを使用してSAPからデータを読み取ります

  23. 23

    UnityでFirebase Cloud Messagingを使用しているときに現在のアクティビティを取得するにはどうすればよいですか?

  24. 24

    SAP Cloud SDK(Java)がSuccessFactorsメタデータのロード時に命名エラー例外をスローする

  25. 25

    Google Cloud Datastore Pythonライブラリを使用するときにメモリリークを調査するにはどうすればよいですか?

  26. 26

    SAP VBAマクロで現在の行を選択するにはどうすればよいですか?

  27. 27

    カーソルを合わせたときにsap.m.tableセルの境界を強調表示するにはどうすればよいですか?

  28. 28

    VBAでSAPGUIスクリプティングを使用する場合、IntelliSenseのように、コーディング中にSAP GUIオブジェクトのプロパティを表示するにはどうすればよいですか?

  29. 29

    SAP LeonardoのAPI翻訳を使用するにはどうすればよいですか?

ホットタグ

アーカイブ