无法使用来自Ffltter的SAS令牌上载到Azure存储 [英] Unable to upload to azure storage with a SAS Token from flutter

查看:16
本文介绍了无法使用来自Ffltter的SAS令牌上载到Azure存储的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用SAS令牌将文件/数据上载到Azure存储。我使用以下方法在没有SAS令牌的情况下成功实现了这一点

  sendToBlob (Uint8List bytes)async {
    var storage = AzureStorage.parse('DefaultEndpointsProtocol=https;AccountName=#;AccountKey=#==;EndpointSuffix=core.windows.net');
    await storage.putBlob('/test/2.txt',bodyBytes: bytes);
  }

当我生成一个SAS令牌并采用以下格式编写的连接字符串时,我收到一个解析错误

"BlobEndpoint=https://#.blob.core.windows.net/;QueueEndpoint=https://#.queue.core.windows.net/;FileEndpoint=https://#.file.core.windows.net/;TableEndpoint=https://#.table.core.windows.net/;SharedAccessSignature=sv=#"

尝试发送不带连接字符串的PUT请求,我的方法如下:

  uploadtoAzure(String sas)async{
    try {
      var url = 'https://#.blob.core.windows.net/test/4.txt?'+sas;
      Map<String, String> headers = ({"x-ms-blob-type": "BlockBlob"});
      final response = await http.put(
          url,
          headers: headers,
          body: 'hi'
      );
      print(response.statusCode);
    } on DioError catch (e) {
      if(e.response.statusCode == 404){
        print(e.message);
      }else{
        print(e.message);
      }
    }
  }

知道我是要上载到的存储帐户的所有者和存储Blob数据参与者,并且SAS令牌未过期,这会导致403 AuthorizationPermissionMisMatch错误。

¿<?xml version="1.0" encoding="utf-8"?><Error><Code>AuthorizationPermissionMismatch</Code><Message>This request is not authorized to perform this operation using this permission.
RequestId:bc7f5bb4-c01e-0066-0459-9a6d45000000
Time:2020-10-04T14:16:54.7302685Z</Message></Error>

有没有方法可以使用带有SAS令牌的连接字符串将数据从Ffltter上传到Azure?我怎样才能解决这个问题呢?

感谢任何帮助。

推荐答案

由于我们的Azure函数正在生成用户委派sas令牌,因此我们使用Azure上注册的应用作为服务主体。

已通过将存储Blob数据参与者存储Blob委托者角色分配给服务主体来解决此问题,以适应文件的添加。

这篇关于无法使用来自Ffltter的SAS令牌上载到Azure存储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆