Учетная запись хранения Azure - временная ссылка для скачивания с использованием контейнера SAS
Я работаю с Python Azure SDK и сталкиваюсь со следующей проблемой.
Я пытаюсь создать токен SAS контейнера, который будет использоваться только в определенном контейнере, для этого я использую Azure SDK. generate_container_sas
def get_temporary_access_token(self):
sas_token = generate_container_sas(
self.account_name,
self.container_name,
self.storage_token,
permission=ContainerSasPermissions(read=True, write=True, delete=True, list=True),
expiry=datetime.utcnow() + self.sas_token_expiry_time
)
return sas_token
Это возвращает строку вроде se=<end_datetime>&sp=<Permission>&sv=2019-07-07&sr=c&sig=<token>
Теперь, используя этот токен, я могу делать все, что угодно, но у меня возникают проблемы с использованием этой ссылки для временной ссылки для загрузки определенного блоба.
Я пытался сделать это таким методом:
def get_temporary_download_link(self, blob_full_path, expires_time):
base_temp_url = f'{self._get_base_resource_url()}/{self.container_name}/{blob_full_path}'
token = generate_blob_sas(
account_name=self.account_name,
account_key=self.sas_token,
container_name=self.container_name,
blob_name=blob_full_path,
permission=BlobSasPermissions(read=True),
expiry=datetime.utcnow() + timedelta(seconds=expires_time)
)
return f'{base_temp_url}?{token}'
Теперь, когда я пытаюсь использовать ссылку, которую я создал в методе выше, у меня не получается следующий метод b64decode
.
Исходя из этого, я могу понять, что я не предполагаю использовать токен SAS для временной ссылки для загрузки, и я могу сделать это только с помощью токена ресурса или объекта делегирования пользователя? Я также попытался "обмануть" метод, закодировав токен SAS, но URL-адрес приводил к ошибкеSignature did not match
Мне не удалось найти никакой документации о том, что я могу или не могу делать с токеном SAS ресурса по сравнению с UserDelegationKey, кто-нибудь знает, можно ли использовать токен SAS ресурса для временной загрузки?
заранее спасибо
1 ответ
В основном проблема в том, что вы используете токен SAS (в вашем случае, созданный для контейнера больших двоичных объектов) для создания нового токена SAS. Это не разрешено. Вам нужно будет использовать ключ учетной записи или ключ делегирования пользователя для создания токена SAS.
Кроме того, вы можете использовать токен SAS, созданный для контейнера больших двоичных объектов, в качестве маркера SAS для больших двоичных объектов внутри этого контейнера. Если вы создаете токен SAS для контейнера больших двоичных объектов с как минимумread
разрешение, вы можете использовать тот же токен SAS для загрузки любого большого двоичного объекта в этот контейнер больших двоичных объектов.