首页 > 解决方案 > Azure REST API 接受某些文件类型,禁止其他文件类型

问题描述

我正在使用 Azure REST API 将文件从一个文件夹复制到另一个文件夹 ( https://docs.microsoft.com/en-us/rest/api/storageservices/copy-file )。所有文件和文件夹都在同一个帐户中,在同一个文件共享中,由同一个用户帐户通过门户上传。我正在使用 SharedKey 身份验证,并且所有请求的密钥都相同。身份验证部分代码来自https://github.com/Azure-Samples/storage-dotnet-rest-api-with-auth.git,请求来自该代码,适用于 Get/Copy 请求。

我的问题是尝试复制某些文件会导致403 Forbidden响应。这似乎与文件类型有关。文件扩展名不是一个因素。我可以复制 .jpg(和 .jpeg)、.txt 和 .pdf 文件。我无法复制 .exe、.mp4 或 .zip 文件。如果我在我的开发机器上重命名扩展名为 .jpg 的 .exe 文件,然后通过门户上传到/source文件夹,尝试通过 API 进行复制会导致禁止响应。文件大小不是一个因素,我成功复制了比问题文件类型大的实际 .jpg 文件。

我找不到任何例子或解释。测试详情如下。

(将 [myaccount] 替换为字符串,[some guid] 确认不为空且有效的 guid 值)

我的文件共享下的目录是:

/目的地

/资源

测试 01:将 th.jpeg 从源复制到目标

要求:

{Method: PUT, RequestUri: 'https://[myaccount].file.core.windows.net/[myshare]/destination/th.jpeg', Version: 1.1, Content: <null>, Headers:
{
  x-ms-date: Wed, 27 Jan 2021 15:13:28 GMT
  x-ms-version: 2017-04-17
  x-ms-copy-source: https://[myaccount].file.core.windows.net/[myshare]/source/th.jpeg
  Authorization: SharedKey [myaccount]:18sCuTcbEOA5TLC11hCEH0pkK93Ln/Wk1BSRy0ytEAA=
  Request-Id: [value is same as failed requests]
}}

回复:

{StatusCode: 202, ReasonPhrase: 'Accepted', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
  ETag: "0x8D8C2D61A12C96B"
  Server: Windows-Azure-File/1.0
  Server: Microsoft-HTTPAPI/2.0
  x-ms-request-id: [some guid]
  x-ms-version: 2017-04-17
  x-ms-copy-id: [some guid]
  x-ms-copy-status: success
  Date: Wed, 27 Jan 2021 15:13:28 GMT
  Content-Length: 0
  Last-Modified: Wed, 27 Jan 2021 15:13:28 GMT
}}

对以下文件的相同请求有效:

测试 02:将 2M.jpg 从源复制到目标

要求:

{Method: PUT, RequestUri: 'https://[myaccount].file.core.windows.net/[myshare]/destination/2M.jpg', Version: 1.1, Content: <null>, Headers:
{
  x-ms-date: Wed, 27 Jan 2021 15:16:51 GMT
  x-ms-version: 2017-04-17
  x-ms-copy-source: https://[myaccount].file.core.windows.net/[myshare]/source/2M.jpg
  Authorization: SharedKey [myaccount]:QWYuXaE0Djs8k3xtOYMpZ831zX/mVD1Kwx1jgwDK9Oo=
  Request-Id: [value is same as successful requests]
}}

回复:

{StatusCode: 403, ReasonPhrase: 'Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
  Server: Microsoft-HTTPAPI/2.0
  x-ms-request-id: [some guid]
  Date: Wed, 27 Jan 2021 15:16:51 GMT
  Content-Length: 763
  Content-Type: application/xml
}}

对以下文件的相同请求以相同的状态和原因失败:

上述列表中的所有 jpg 文件实际上都是已重命名的 .exe 或 .zip 文件。

标签: azureazure-filesazure-rest-api

解决方案


推荐阅读