问题标签 [jose]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1325 浏览

java - Java 和 .Net 4.6 为相同的密钥生成不同的 JSON Web 加密 (JWE) 令牌

我需要从 Java 和 .Net 4.6 c# 应用程序生成 JWE 令牌(JWE 令牌将在 Java 和 .Net 应用程序之间传递)。Java 应用程序使用 Nimbus Jose 库,.Net 应用程序使用nuget 中可用的jose-jwt包。

我目前正在制作一个样本。但是,对于相同的密钥、密钥 ID 和有效负载,Java 和 .Net 应用程序会生成不同的 JWE 令牌。

Java 加密代码示例(由另一个第 3 方完成,无法更改其实现):

.Net 代码

这两个 JWE 令牌是不同的。我在 .Net 代码中缺少什么(我想只更改 .Net 代码)?是否还有其他可用于 JWE 的 .Net 4.6 兼容库?

0 投票
0 回答
1128 浏览

c# - 使用 JOSE 和 A256GCM 解密 JWE 令牌

我对此很好奇,想看看是否有人理解它。

我正在使用jose-jwt.NET 中的 nuget 对有效负载进行编码:

这将返回一个看起来正确的令牌。

当我使用 JOSE 解密相同的有效载荷时:

它抛出一个错误:

BCrypt.BCryptDecrypt():身份验证标签不匹配

这是正常的吗?JWE 加密是否应该无法解密,或者有人可以解释为什么会发生此错误?

谢谢

0 投票
1 回答
1202 浏览

php - 无法使用 github.com/web-token/jwt-framework 解密 JWE 令牌

遵循https://github.com/ndi-trusted-data/myinfo-demo-app/blob/master/lib/security/security.js上的指南

我设法在节点 js 环境中解密了 JWE 令牌,但没有在 php 中解密。

但是,使用 PHP 中的相同实现,我无法使用相同的密钥解密相同的 JWE。

我下面的代码有什么问题吗?尝试了2天,我被卡住了。我的代码或两个库的实现都不是标准的有什么问题吗?

这是nodejs成功解密的输出。

遵循文档https://web-token.spomky-labs.com/components/encrypted-tokens-jwe/jwe-loading

期待解码的 JWT 有效负载,但不断出错。

0 投票
0 回答
340 浏览

java - Java (Android):根据 JWA (RFC 7518) 的 Diffie-Hellman 密钥交换过程

我需要使用 ECDH 密钥交换过程来加密/解密客户端和服务器之间的消息。
我使用jose4j库来实现加密功能。

我有本地密钥对(privatedC和 public QC),我有远程公钥QT,我有transactionIDand referenceNumber

现在,我需要从所有这些详细信息中生成一个内容加密密钥 (CEK),并使用它来解密从服务器接收到的消息以及加密发送到服务器的消息。

我找不到应该怎么做。

规格:

Diffie-Hellman 密钥交换过程根据 JWA (RFC 7518) 在 Direct Key Agreement 模式下使用曲线 P-256,dCQT生成一对 CEK(每个方向一个),它们被标识为transactionID. 为了从包含的 Concat KDF 函数中获取 256 位的密钥材料,假设 ECDH-ES+A256KW 的“enc”参数并假设 KDF 的 algorithmID 为空(注意,这仅使用 RFC 7518 进行密钥派生)。此版本规范支持的参数值为:

  • “alg”:ECDH-ES
  • “apv”:referenceNumber
  • “EPK”:
  • {“kty”:“EC”“crv”:“P-256”}
  • 所有其他参数:不存在
  • CEK:“kty”:提取为 oct-256 位:
    • CEK(a->s):256 位
    • CEK(s->a):256 位

谢谢!

0 投票
0 回答
381 浏览

ruby - Ruby JWE 与 A256GCMKW 算法和加密与 A256GCM

我已经使用 alg:"A256GCMKW"、enc:"A256GCM" 和 channelSecurityContext:"SHARED_SECRET" 加密了 JWE 中的纯文本。我为此使用Jose Gem。我生成了一个可以解密但其他方无法解密的有效负载。他们为此使用了 nimbus-jose。生成了我无法解密的有效载荷。

有人可以帮忙吗?我需要按照 JWE 解密。

JWE 包含

shared_secret 密钥是 5foz3ZBrufi2JzmKgoLO6Av7pu4btFGY5iE@uFm0

在 Java 中,我们可以使用 Nimbus JOSE+JWT 库对其进行解密。它的代码如下

0 投票
1 回答
1212 浏览

python - 何塞加密返回二进制字符串,但用解码后的字符串解密会在 python 中出错

我正在使用josepython jwe 加密。

这是我的示例代码

这里jwt的值为binary string

当我用相同的jwt值解密时,它会给我准确的结果。

在这里,当我尝试使用json加密值时

它给了我错误Object of type 'bytes' is not JSON serializable

我可以像这样解码加密:

但是使用此加密值解密会引发错误。我不想jwt在解密过程中进行编码。

无论如何我可以得到string而不是byte同时加密,以便我可以将它转储到 JSON。

0 投票
1 回答
842 浏览

python - 如何加密字典数据?

我正在使用jwcrypto公钥加密数据。我已经阅读了文档,并且JWE该类仅将纯文本作为有效负载。

但是我有一本字典可以加密为有效载荷。

我可以将字典转换为 json 并加密有效负载,但解密我的数据的人会在解密后期待字典。

无论如何我可以将字典加密为有效负载。

0 投票
1 回答
2125 浏览

jwt - 如何验证 Microsoft jwt id_token?

我正在使用从 Microsoft 到客户端的 jwt 令牌来验证从它到 Web API(服务器)的请求。我可以控制客户端(js)和服务器(Python)的代码。

在客户端,我使用以下请求获取令牌(用户通过租户上的密码/2FA 声明):

这里guid有一个独特的价值,TENANT_ID是租户,CLIENT_ID也是客户。

获得此令牌后,我将其作为授权标头发送,如下所示:

然后在服务器上检索令牌并验证它:

jwk的内容在哪里https://login.microsoftonline.com/{TENANT_ID}/discovery/v2.0/keys

整个流程一直有效,直到验证失败,并出现以下错误:

这表明令牌的标头包含一个密钥nonce(我验证了它)。

在此处查看Microsoft 的文档,标头上没有对 anonce的引用——只是在有效负载上。

Q1:我在这里做错了什么?

Q2:假设微软是把 nonce 放在错误的地方(头而不是有效负载)的人,是否可以在将 nonce 传递给 jose 的身份验证库之前从头(在服务器端)中删除它?这样做安全吗?

0 投票
1 回答
166 浏览

swift - Jose Encrypter 返回零

我正在使用JOSESwift。当我使用 Encrypter 方法时,它返回时nil没有任何错误的详细信息。下面是我的代码示例。任何人都可以请帮助为什么 Encrypter 方法返回nil

意图:我正在尝试为我的 JWE 对象设置包装密钥,并且从 JOSESwift 我可以理解 Encrypter 接受了该 cek 密钥。

0 投票
0 回答
1249 浏览

node.js - 如何使用 square/go-jose 包验证 JWS

我正在使用 node-jws 包(https://www.npmjs.com/package/jws)在 JavaScript 中生成 JSON Web 签名。在标题中,我给出了 crit: ["exp"] 和 exp: someTimeStamp。下面给出的代码片段用于生成 JWS:

我正在使用下面给出的代码片段在 Golang 中验证这个令牌:

如果我在 JS 中生成令牌时没有在标题中给出 crit: ["exp"] ,则 GO 中的上述代码有效。否则,它会给我错误的说法square/go-jose: error in cryptographic primitive

我必须不惜一切代价在标题中使用 crit: ["exp"] 。有没有办法验证这一点?