从 azure python sdk JWK 生成 jwcrypto JWK
Generate jwcrypto JWK from azure python sdk JWK
我正在使用 azure-sdk 从 Azure Key Vault 获取密钥。这个 returns 一个 KeyBundle,它有一个类型为 azure.keyvault.v7_0.models.json_web_key_py3.JsonWebKey
的 key 属性
对于我代码的不同部分,我需要从 jwcrypto JWK 制作一个签名令牌。 JWT.make_signed_token
方法采用 JsonWebKey。从 Azure 返回的 JsonWebKey(我认为)实际上是相同的 class,在不同的包中定义。
有没有办法将 Azure JWK 变成 jwcrypto JWK?我认为可以将所有属性一一转置,但想知道是否有更优雅的方法。
编辑:忘记包含版本...
- Windows 10
- Python 3.6.5
- jwcrypto 0.6.0
- azure-keyvault 1.1.0 和 azure-mgmt-keyvault 1.1.0
将 Azure JWK 对象转换为 jwcrypto
JWK 对象的简单方法如下面的代码。
import jwcrypto.jwk as jwk
azureJwkObj = .... # your Azure JWK object
azureJwkDict = azureJwkObj.__dict__
jwcryptoJwkObject = jwk.JWK(**azureJwkDict)
下同
jwcryptoJwkObject = jwk.JWK().import_key(**azureJwkDict)
我认为 jwcrypto.jwk.JWK
的函数 import_key
需要 dict
作为参数来生成 jwcrypto
JWK 对象Python.
的 Azure KeyVault SDK 和 jwcrypto
的源代码
根据jwcrypto
的源代码json_web_key_py3.py
of Azure KeyVault SDK and jwk.py
,我尝试生成一个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
所需的字典,以通过 import_key
函数创建 jwcrypto
JWK 对象。
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)
我正在使用 azure-sdk 从 Azure Key Vault 获取密钥。这个 returns 一个 KeyBundle,它有一个类型为 azure.keyvault.v7_0.models.json_web_key_py3.JsonWebKey
对于我代码的不同部分,我需要从 jwcrypto JWK 制作一个签名令牌。 JWT.make_signed_token
方法采用 JsonWebKey。从 Azure 返回的 JsonWebKey(我认为)实际上是相同的 class,在不同的包中定义。
有没有办法将 Azure JWK 变成 jwcrypto JWK?我认为可以将所有属性一一转置,但想知道是否有更优雅的方法。
编辑:忘记包含版本...
- Windows 10
- Python 3.6.5
- jwcrypto 0.6.0
- azure-keyvault 1.1.0 和 azure-mgmt-keyvault 1.1.0
将 Azure JWK 对象转换为 jwcrypto
JWK 对象的简单方法如下面的代码。
import jwcrypto.jwk as jwk
azureJwkObj = .... # your Azure JWK object
azureJwkDict = azureJwkObj.__dict__
jwcryptoJwkObject = jwk.JWK(**azureJwkDict)
下同
jwcryptoJwkObject = jwk.JWK().import_key(**azureJwkDict)
我认为 jwcrypto.jwk.JWK
的函数 import_key
需要 dict
作为参数来生成 jwcrypto
JWK 对象Python.
jwcrypto
的源代码
根据jwcrypto
的源代码json_web_key_py3.py
of Azure KeyVault SDK and jwk.py
,我尝试生成一个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
所需的字典,以通过 import_key
函数创建 jwcrypto
JWK 对象。
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)