Генерация jwcrypto JWK из лазурного Python SDK JWK - PullRequest
0 голосов
/ 25 февраля 2019

Я использую azure-sdk , чтобы получить ключ из хранилища ключей Azure.Это возвращает KeyBundle , который имеет атрибут key типа azure.keyvault.v7_0.models.json_web_key_py3.JsonWebKey

Для другой части моего кода мне нужно сделать подписанный токен из jwcrypto JWK.JWT.make_signed_token метод принимает JsonWebKey.JsonWebKey, возвращаемый из Azure, является (я думаю) фактически одним и тем же классом, определенным в другом пакете.

Есть ли способ превратить Azure JWK в jwcrypto JWK?Я предполагаю, что можно было бы транспонировать все атрибуты один за другим, но мне было интересно, есть ли более элегантный способ.

Редактировать: Забыл включить версии ...

  • Windows10
  • Python 3.6.5
  • jwcrypto 0.6.0
  • azure-keyvault 1.1.0 и azure-mgmt-keyvault 1.1.0

1 Ответ

0 голосов
/ 26 февраля 2019

Простой способ преобразования объекта JWK Azure в объект * JWK jwcrypto представлен в приведенном ниже коде.

import jwcrypto.jwk as jwk

azureJwkObj = .... # your Azure JWK object
azureJwkDict = azureJwkObj.__dict__

jwcryptoJwkObject = jwk.JWK(**azureJwkDict)

Также ниже.

jwcryptoJwkObject = jwk.JWK().import_key(**azureJwkDict)

Я думаю, что есть функция import_key из jwcrypto.jwk.JWK, для которой требуется dict в качестве параметра для генерации * JVK-объекта jwcrypto после просмотра исходного кода Azure KeyVault SDK и jwcrypto для Python.

В соответствии с исходным кодом json_web_key_py3.py пакета Azure KeyVault SDK и jwk.py из jwcrypto я попытался сгенерировать объект jwcrypto JWK, чтобы увидеть его структуру черезприведенный ниже код.

from jwcrypto import jwk
key = jwk.JWK.generate(kty='oct', size=256)
print(key.__dict__)
# The output is {'_params': {'kty': 'oct'}, '_key': {'k': 'HJUk1CeudZ2Tur0fzHnOi-1U9UjxaUjClRW8TvqFakI'}, '_unknown': {}}

Затем я попытался использовать приведенный ниже код для преобразования объекта Azure JWK в диктофон, требуемый jwcrypto.jwk.JWK.import_key для создания jwcrypto объекта JWK с помощью функции import_key.

import jwcrypto.jwk as jwk

azureJwkObj = .... # your Azure JWK object
azureJwkDict = azureJwkObj.__dict__

_params = {k: v for k, v in azureJwkDict.items() if k in jwk.JWKParamsRegistry.keys()}
kty = _params.get('kty', None)
_key = {k: v for k, v in azureJwkDict.items() if k in jwk.JWKValuesRegistry[kty].keys()}

args = {'_params': _params, '_key': _key, '_unknown': {}}

jwcryptoJwkObject = jwk.JWK.import_key(args)

...