无法找到使用 jwcrypto 在 python 中解密 JWE 令牌(但在 ASP.Net 中创建)的方法

2023-12-22

使用 ASP.Net 加密后,我在 python 中解密 JWE 令牌时遇到困难。

这是我的 C# 代码(假密码):

var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("ae743683f78d498a9026d0c87020b9d3"));
var secret = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("MbPeShVmYq3t6w9z"));

var signingCreds = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
var encryptingCreds = new EncryptingCredentials(secret, SecurityAlgorithms.Aes128KW, SecurityAlgorithms.Aes128CbcHmacSha256);
var handler = new JwtSecurityTokenHandler();

var jwtSecurityToken = handler.CreateJwtSecurityToken(
    _issuer,
    _audience,
    new ClaimsIdentity(claimsList),
    DateTime.Now,
    _expires,
    DateTime.Now,
    signingCreds,
    encryptingCreds);

var token = handler.WriteToken(jwtSecurityToken);

使用加密凭证时,令牌看起来像这样(应该typ not be JWE?):

{
    {
        "alg": "A128KW",
        "enc": "A128CBC-HS256",
        "typ": "JWT"
    }.{
        "userId": "151aedd5-76c3-4eb2-8b73-a16004315731",
        "prop1": "test1",
        "prop2": "test2",
        "nbf": 1549894420,
        "exp": 1550240017,
        "iat": 1549894420,
        "iss": "https://localhost:56880/",
        "aud": "https://localhost:56880/"
    }
}

这是加密后的令牌:

eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwidHlwIjoiSldUIn0.4w4MZv5WFALGbXhmaYqtTv1VGrUpQpDJ0jN8VmLpQwDRU0j16RbPyg.hGt_z5j8THCiNEhpVvlJmw.WehLBKdyB_eYtDRvHxJHgYwa4GA7f8oKYf3GgIqAAih1eVqU084kHu1lIhC8ibxxziwmFZ4IhBFT-nWgWQrH9thhgqndF4ojtGRBgdHtW3GDAgYV6fgI11h6meyBBuLBs7mkQC5PX8EYsMTDiNE9iNTH4pWtDElc07CGGXlHsm6ntuq7G3sinagZtZMchy1shTY73NTS40FqW37C9HTIPDbrTdsm-USHcGaBMLSmjF5eOZ9Po3p4fhRT42l_gwJc9tlurttYBucvIiO1r_3NB8xGeORizYW1P_P9XGusAFy4L8h8XU9P0FctsMjUFy64LOIK8Qv8YZVq4q82vv-r9uGH6bApUdpCIcYFfGu86w63t1QLQcDT_OYMCqwo9ZmZP5Gd07lB1ypNZbP6hQTgkosp3js3i4K4bFQY7CiSXB_pSTH623TMLHNfUXWMRMIBHmXGr-zTZiKj5vkVUZLjNg.sdBUYvadnwMhkCXP8sABgA

我尝试了几个不同的 python 包,包括 2 个版本的 jose (python-jose and jose),但无法让 jose 使用加密(似乎不支持 A128KW 算法)。

我现在正在尝试jwcrypto但它似乎希望我生成一个新密钥,而不是使用现有的密钥(用于在 ASP.Net 中加密 JWT 的密钥):

from jwcrypto import jwk, jwe

encrypted_token = request.cookies.get(cookie_name)  
private_key = "MbPeShVmYq3t6w9z"

jwk_key = jwk.JWK()

# not sure how to use my existing "private_key" value, 
# and no support for "A128KW" with jwcrypto despite 
# the documentation saying there is support
key = jwk_key.import_key(alg='A128KW', kty="A256CBC-HS512")

jwe_token = jwe.JWE()
jwe_token.deserialize(encrypted_token)
jwe_token.decrypt(key) # decrypt requires an instance of JWK
decrypted_payload = jwe_token.payload

我怎样才能让它发挥作用?感谢您提供的任何建议。


看起来像python-jose不支持 JWE。在他们的在线文档 https://python-jose.readthedocs.io/en/latest/ or 在源代码中 https://github.com/mpdavis/python-jose/我找不到任何与 JWE 解析或加密/解密相关的代码行。

希望在 jwt.io 的库列表中,我找到了jwcrypto https://jwcrypto.readthedocs.io/en/latest/index.html应该支持这种加密令牌(参见本例涉及 A256KW https://jwcrypto.readthedocs.io/en/latest/jwe.html#symmetric-keys)并且在源代码中我们可以看到A128KW上市 https://github.com/latchset/jwcrypto/blob/master/jwcrypto/jwe.py#L33.

你可以尝试一下。

from jwcrypto import jwk, jwe

encrypted_token = request.cookies.get(cookie_name)  

key = jwk.JWK.from_json('{"kty":"oct","k":"TWJQZVNoVm1ZcTN0Nnc5eg"}')

jwe_token = jwe.JWE()
jwe_token.deserialize(encrypted_token)
jwe_token.decrypt(key)
decrypted_payload = jwe_token.payload
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法找到使用 jwcrypto 在 python 中解密 JWE 令牌(但在 ASP.Net 中创建)的方法 的相关文章

随机推荐

  • 带方括号的编码 URL。 Chrome/Firefox/IE 中的不同行为

    我有一个看起来像这样的链接 它有点难看 因为它是 URL a href items fc 5B 5D 12345 amp fc 5B 5D 56789 amp utf8 E2 9C 93 foo a 明确一点 它是 URL 编码并转换为 a
  • 如何让 python 等待 Excel 宏/刷新完成

    我正在使用 Python 在 Excel 中运行宏 我希望Python关闭excel 该宏刷新 Excel 中的数据连接 这可能会很慢 我如何让 python 等到刷新完成才关闭 这就是我正在使用的 我在 xl Quit 之前需要一些东西
  • Nodejs 加密与 python hashlib

    我试图让 python 函数和 nodejs 函数计算相同的哈希值 然而 nodejs crypto 和 python hashlib 之间输出的二进制文件似乎不同 我使用的Python是 hash hashlib sha512 hash
  • 从 Activity 打开片段

    我正在开发一个小型谷歌地图应用程序 它可以让用户找到靠近他们的地方 我想添加功能 让用户将一个地方添加到收藏夹列表中 到目前为止 我创建了可以执行该功能的类 我的主要活动是我的主页 它打开其他活动 代码如下 import android a
  • 修复 Ember 1.12.0 中初始化程序的弃用问题

    我指的是 Ember 1 12 中引入的这一特定弃用 lookup被要求登记 这initializerAPI 不再 收到一个容器 你应该使用instanceInitializer到 从容器中查找对象 我查看了指南 但不确定如何解决这个问题
  • 在运行时在 WPF RichTextBox 中的新行中添加文本

    我想在运行时在 WPF RichTextBox 中的新行中添加一些文本 我可以使用以下方法来做到这一点 FlowDocument mcFlowDoc new FlowDocument mcFlowDoc richTextBox Docume
  • MVC、控制器 - 用例

    我了解到 您应该在 MVC OOD 中将控制器类设置为用例 从上到下仅使用一种运行 MVC 类的方法 是否可以在一个控制器中使用不同的方法来获得更多控制和更好的概览 假设您想要运行一个控制器来显示登录表单 从视图获取 html 等 如果用户
  • Matlab 中的相交体积

    我开发了一个代码 它采用一组 3D 坐标 并执行三角测量来生成凸包 Delaunay 这一切进展顺利 使用 Deluanay 三角测量 我可以使用 tsearchn 测试点是否包含在给定体积中 现在我想取两个这样的 3D 体积 并测试它们是
  • 什么是 Visio Enterprise Architect 的良好替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在使用 Visio 2002 2003 Enterprise Architect 直观地进行数据库架构设计 然后前向生成 DDL 来
  • 解析 PHP 中的属性/值列表

    给定一个带有属性 值对的字符串 例如 attr1 some text attr2 some other text attr3 some weird text 目标是解析它并输出一个关联数组 在本例中 array attr1 gt some
  • 在 PyCharm IDE 中添加 Spark 包

    我已将 PyCharm 设置为与本地 Spark 安装链接在这个链接中 https stackoverflow com questions 34685905 how to link pycharm with pyspark from pys
  • 那么:有什么意义呢?

    其预期目的是什么So https github com idris lang Idris dev blob master libs base Data So idr L14类型 音译为阿格达 data So Bool Set where o
  • 无服务器 Cron 作业触发两次

    我不知道为什么 但我的 webhook 在我的 cron 作业中被解雇了两次 因此 这个 cron 作业应该每 15 分钟运行一次 但它确实执行了两次 我将发布日志 处理程序和 yml 文件来提供帮助 基本上我的 cron 作业将向 sal
  • 在数据库中仅存储日期而不是时间部分 C#

    我有一个测试班和一个ExecutionDate只存储日期的属性 但是当我们使用 DataType DataType Date 它还将时间部分存储在数据库中 但我只想要日期部分 public class Test Key public int
  • Ooyala播放器(iOS):如何全屏启动?

    我在我的项目中使用 Ooyala 播放器 该项目曾经使用 MPMoviePlayer 我们只需更改视图的大小以使其全屏或不全屏 但 Ooyala 播放器似乎通过使用另一个模态视图控制器来维护自己的全屏 内联模式切换到全屏 这会产生很多问题
  • SQL Server 与 ADO.NET 的默认事务隔离级别是什么?

    SQL Server 与 ADO NET 的默认事务隔离级别是什么 我使用的是 SQL Server 的默认安装和普通的 System Data SqlClient 类 READ COMMITTED 是 Microsoft SQL Serv
  • FileProvider - 从下载目录打开文件

    我无法打开下载文件夹中的任何文件 我可以使用以下命令下载文件并将其保存在下载文件夹中 DownloadManager Request request new DownloadManager Request Uri parse url req
  • MySQL 查询显示当前日期在顶部的记录以及其他按降序排列的记录

    我在数据库中使用以下查询 SELECT b sales id b category id b sale starts b sale ends FROM tbl sales b WHERE b active 1 UNION SELECT b
  • 如何更改 Material UI 工具栏的高度?

    我是 React 和 Material UI 的新手 我正在努力解决组件占用多少垂直空间的问题 我想做的一件事是降低工具栏的高度 我尝试过指定样式
  • 无法找到使用 jwcrypto 在 python 中解密 JWE 令牌(但在 ASP.Net 中创建)的方法

    使用 ASP Net 加密后 我在 python 中解密 JWE 令牌时遇到困难 这是我的 C 代码 假密码 var signingKey new SymmetricSecurityKey Encoding UTF8 GetBytes ae