За исключением данных, которые я передаю 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 - имя ключа, r3 - версия ключа. Я использую документы из Пакет SDK Azure для Python - Keyvault. Также я попробовал стандартную функцию кодирования base64 python вместо «urlsafe», я получил то же самое.