AzureException:填充不正确。只需遵循 Azure 教程即可

问题描述 投票:0回答:3

我正在尝试学习如何使用Azure 表存储服务。我正在关注本教程:https://learn.microsoft.com/en-us/azure/storage/storage-python-how-to-use-table-storage,我只需将代码复制粘贴到Jupyter 笔记本。我已设置存储帐户并成功使用 Blob 存储。也来自笔记本。

教程中的代码:

from azure.storage.table import TableService, Entity
table_service = TableService(account_name='myaccount', account_key='mykey')
table_service.create_table('tasktable')

当我运行最后一行时,出现以下错误,我不确定我做错了什么导致它

---------------------------------------------------------------------------
Error                                     Traceback (most recent call last)
/usr/local/lib/python3.5/site-packages/azure/storage/storageclient.py in _perform_request(self, request, parser, parser_args, operation_context)
    205                     _add_date_header(request)
--> 206                     self.authentication.sign_request(request)
    207 

/usr/local/lib/python3.5/site-packages/azure/storage/_auth.py in sign_request(self, request)
     96 
---> 97         self._add_authorization_header(request, string_to_sign)
     98 

/usr/local/lib/python3.5/site-packages/azure/storage/_auth.py in _add_authorization_header(self, request, string_to_sign)
     50     def _add_authorization_header(self, request, string_to_sign):
---> 51         signature = _sign_string(self.account_key, string_to_sign)
     52         auth_string = 'SharedKey ' + self.account_name + ':' + signature

/usr/local/lib/python3.5/site-packages/azure/storage/_common_conversion.py in _sign_string(key, string_to_sign, key_is_base64)
     87     if key_is_base64:
---> 88         key = _decode_base64_to_bytes(key)
     89     else:

/usr/local/lib/python3.5/site-packages/azure/storage/_common_conversion.py in _decode_base64_to_bytes(data)
     77         data = data.encode('utf-8')
---> 78     return base64.b64decode(data)
     79 

/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/base64.py in b64decode(s, altchars, validate)
     89         raise binascii.Error('Non-base64 digit found')
---> 90     return binascii.a2b_base64(s)
     91 

Error: Incorrect padding

During handling of the above exception, another exception occurred:

AzureException                            Traceback (most recent call last)
<ipython-input-17-192b23ba629f> in <module>()
----> 1 table_service.create_table('tasktable')

/usr/local/lib/python3.5/site-packages/azure/storage/table/tableservice.py in create_table(self, table_name, fail_on_exist, timeout)
    520         if not fail_on_exist:
    521             try:
--> 522                 self._perform_request(request)
    523                 return True
    524             except AzureHttpError as ex:

/usr/local/lib/python3.5/site-packages/azure/storage/table/tableservice.py in _perform_request(self, request, parser, parser_args, operation_context)
   1087     def _perform_request(self, request, parser=None, parser_args=None, operation_context=None):
   1088         _update_storage_table_header(request)
-> 1089         return super(TableService, self)._perform_request(request, parser, parser_args, operation_context)

/usr/local/lib/python3.5/site-packages/azure/storage/storageclient.py in _perform_request(self, request, parser, parser_args, operation_context)
    264                     sleep(retry_interval)
    265                 else:
--> 266                     raise ex
    267             finally:
    268                 # If this is a location locked operation and the location is not set,

/usr/local/lib/python3.5/site-packages/azure/storage/storageclient.py in _perform_request(self, request, parser, parser_args, operation_context)
    240                     if sys.version_info >= (3,):
    241                         # Automatic chaining in Python 3 means we keep the trace
--> 242                         raise AzureException(ex.args[0])
    243                     else:
    244                         # There isn't a good solution in 2 for keeping the stack trace

AzureException: Incorrect padding
python azure azure-table-storage
3个回答
3
投票

总结一下,该问题是由于帐户密钥的变量名称出现错误而导致的。根据错误信息

Error: Incorrect padding
,正如@Scovetta所说,似乎不是
BASE64
编码。对键的一些更改(例如缺少最后一个
=
符号或添加更多
=
符号)将导致错误。 Azure存储的正确帐户密钥长度是88。


2
投票

在我最喜欢的搜索引擎中输入“不正确的填充天蓝色”后,无耻的死灵。
结果我像这样传递参数:

--account-key "$ACCOUNT_KEY"
,而 Azure 不理解引号。
由于它应该是 base64 编码的,所以其中的所有字符都应该是 shell 安全的,所以如果你的输入没问题,那么这样放置应该不会有任何问题。


0
投票

访问密钥或 SAS 密钥需要采用 Base 64 编码。如果直接通过就使用这种设置。

import base64

Accesskey=" R2Vla3NGb3JHZWVrcyBpcyB0aGUgYmVzdA ==" Accesskey_base64= Accesskey.encode("ascii")

这对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.