Azure keyvault Python SDK和sign()方法提供的“value”长度无效:44字节。ES256需要32个字节,用base64u编码

2024-10-16 17:21:40 发布

您现在位置:Python中文网/ 问答频道 /正文

除了我给sign()的数据是32字节编码为urlsafe-base64。不知道他们从哪里得到44分。在

#!/usr/bin/env python3

from azure.keyvault import KeyVaultClient
from msrestazure.azure_active_directory import MSIAuthentication
from base64 import urlsafe_b64encode
from hashlib import blake2b
from binascii import unhexlify

kvclient = KeyVaultClient(MSIAuthentication(resource='https://vault.azure.net'));
op = urlsafe_b64encode(blake2b(unhexlify('00112233'), digest_size=32).digest())
print(op)
sig = kvclient.sign('https://REDACTED1.vault.azure.net', 'REDACTED2', 'REDACTED3', 'ES256', op)

$ ./aclient.py
b'QO46UZnfhhh93VCTkagtPzWj1Z-4PvmzmKdsmA4fepY='
Traceback (most recent call last):
  File "./aclient.py", line 12, in <module>
    sig = kvclient.sign('https://REDACTED1.vault.azure.net', 'REDACTED2', 'REDACTED3', 'ES256', op)
  File "/home/dev/hsm/lib/python3.6/site-packages/azure/keyvault/v7_0/key_vault_client.py", line 1022, in sign
    raise models.KeyVaultErrorException(self._deserialize, response)
azure.keyvault.v7_0.models.keyvault.v7_0.models.key_vault_error_py3.KeyVaultErrorException: (BadParameter) Invalid length of 'value': 44 bytes. ES256 requires 32 bytes, encoded with base64url.

其中的身份验证/令牌通过系统分配的托管标识进行处理-ES256用于ECC P256密钥签名。R1是我的keyvault域主机名,R2是keyname,r3是keyversion。我正在使用来自Azure SDK for Python - Keyvault的文档。我还尝试了python的标准base64 encode函数来代替“urlsafe”函数,我得到了相同的结果。在


Tags: frompyhttpsimportnetazurekeyvaultv7
1条回答
网友
1楼 · 发布于 2024-10-16 17:21:40

很明显,我认为这不是一条错误的消息,我认为这条消息并不适用于cd1

如果查看sign()函数的SDK example,请看第344行。它使用一个名为“digest”的变量作为字节作为值传递给sign()函数。在第337行是创建这个摘要的地方,我们都知道这些摘要是32字节的二进制类型。在

因此,尽管有这个错误,这个sign()函数不应该首先对数据进行base64encode。Im几乎百分之百地肯定存在支持restapi的错误,restapi确实使用base64encoded字符串来表示要签名的32字节数据,其中base64url字符串的长度是44个个字符。在

`DOH(多)

相关问题 更多 >