いくつかの DB テーブルと OData サービスを備えた SAP HANA XS サーバーがあります。OData サービスに接続してデータを読み取ることができます。データを作成/更新/削除しようとするとすぐに403 - Forbidden
エラーが発生します。
実際、私のユーザーには、前述のすべてのアクションを実行するために必要な権限があります (HANA Studio で SQL コマンド ラインを使用してデータを作成しました)。SYSTEM ユーザーで同じことを試みると、同じ結果が得られます。
2 に答える
.xsaccess ファイルが次のようになっている場合:
{
"prevent_xsrf": true,
...
}
エンティティを変更する前に、XSRF トークンをフェッチする必要があります。エンティティの読み取りはなくても機能します。
このようなトークンは、次のヘッダーを使用してサービス エンドポイントに対して GET を実行することで取得できますX-CSRF-Token=Fetch
。応答には、このようなヘッダーが含まれていますX-CSRF-Token=13DC4988AEAA95...
。たとえば、取得したばかりのトークンを使用して POST を実行すると、機能します。
あなたの OData サービスは、データの変更を許可しないように定義されていると思います。
デフォルトでは、OData サービスのすべてのエンティティ セットと関連付けは書き込み可能です。つまり、CREATE、UPDATE、または DELETE 要求で変更できます。ただし、 OData サービス定義のオプションで適切なキーワード ( create、update、またはdelete ) を設定することで、変更要求の実行を防ぐことができます。
forbidden
SAP HANA XS の OData サービス定義の次の例は、OData サービスmyTable
によって公開されるテーブルへの変更を防止する方法を示しています。CREATE、UPDATE、または DELETE 要求を使用して指定されたテーブルを変更しようとすると、HTTP 応答 status になります403 FORBIDDEN
。
service {
“sap.test::myTable”
create forbidden
update forbidden
delete forbidden;
}