无法为天蓝色斑点生成正确的SAS令牌

时间:2019-12-04 16:22:11

标签: scala azure sas azure-blob-storage

我试图使用Java库azure-storage 8.0.0生成SAS令牌,并在容器级别生成SAS令牌,然后我使用该sas令牌运行azcopy命令。以下是用于生成SAS令牌的代码。

  /**
    * generates the permission policy for storage account
    *
    * @param blobExpiry expiry of sas token
    * @return
    */
  private def getBlobPolicy(blobExpiry: Date, permissionString: String): SharedAccessBlobPolicy = {
    val policy = new SharedAccessBlobPolicy()
    policy.setSharedAccessStartTime(Date.from(ZonedDateTime.now().toInstant))
    policy.setSharedAccessExpiryTime(blobExpiry)
    policy.setPermissionsFromString(permissionString)

    policy
  }

* @param permissionString permission string ex. radcwl where r = read, a= add, d=delete, c = create w=write l = list
    * @return SASToken for container
    */
  def getContainerSASToken(permissionString: String): String = {
    val container = getAzureblobConfig().getContainerRef(new String(Base64.encodeBase64(getAzureblobConfig()
      .sparkKeyOptionName().getBytes()))).get
    val expiryDate: Date = Date.from(ZonedDateTime.now.toInstant.plusSeconds(86400))

    "\"" + s"?${container.generateSharedAccessSignature(getBlobPolicy(expiryDate, permissionString), null)}" + "\""
  }

我想这是生成SAS令牌的方法,但是有些方法却无法生成正确的令牌。

我遇到的错误

签名不匹配。用于签名的字符串是racwdl

403服务器无法验证请求。确保包括签名在内的Authorization标头的值正确形成

由代码生成的令牌:

?sig=P5BfjwRj3fxDWoohchvZmr3w3cEnzjewv8KbX8zUmeY%3D&st=2019-12-03T06%3A56%3A51Z&se=2019-12-10T06%3A56%3A51Z&sv=2018-03-28&spr=https&sp=racwdl&sr=c

如果我要从Azure存储资源管理器中生成SAS令牌,并用我的代码生成的SAS替换它,它就可以正常工作。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下操作,

5 6 2 1
7 9 7 5
3 3 8 6
3 0 3 4

SAMPLE REPOSITORY