问题标签 [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 回答
11122 浏览

c# - 从 KeyPair 字符串签名和加密

我是 jwt 的新手,在阅读了很多网页后,我没有找到如何使用从该网站生成的密钥对生成令牌(签名和加密)的示例https://mkjwk.org/。我认为这不会很困难。我认为这是生成签名令牌的方式(我不知道它是否正确):

我得到了一个令牌(我认为是签名的),但是如果我将此令牌放在这个网站https://jwt.io/中,我会收到一个错误“无效签名”。我也想用公钥加密这个令牌。所以我这样做:

但我总是收到错误“RsaKeyManagement alg 期望密钥为 RSACryptoServiceProvider 类型。”。我已经搜索过这个错误,但我没有什么清楚的。拜托,有人可以帮助我吗?我不确定我是否走对了路。

我将 jose-jwt 用于 .net,因为我读过库 System.IdentityModel.Tokens.Jwt 无法加密。

谢谢你。问候。

0 投票
1 回答
2594 浏览

c# - Jose-JWT 中的公钥加密

我认为这个问题不是骗人的,所以我将尝试解释我的情况。

我正在测试 JWT,更具体地说是来自 Github的 JOSE-JWT 库,好吧,我遇到了麻烦。

我正在使用 PHP 和phpseclib生成一个私钥-公钥对并将公钥发送给客户端。如您所见一切都是正确的。我的客户正在接收 JSON 并将其转换为对象并使用JSON.NET将其提取为字符串。

我正在使用BouncyCastle和 Stackoverflow 的答案,稍作修改即可直接从字符串中读取,而不是从文件中读取。

他们都给我带来了问题,答案和使用来自 Jose repo 的文档:

例外:

...

等效英文: http: //unlocalize.com/es/74799_Keyset-does-not-exist.html

还有充气城堡:

例外:

...

从这里提取的CreateToken方法:https ://stackoverflow.com/a/44857593/3286975

我对这个方法做了一点修改:

在这两种情况下,就像加密器方法正在寻找私钥(在客户端客户端????)......所以,我的问题是为什么这个例子在客户端使用私钥,如果维基百科这么说:

...

来源: https ://en.wikipedia.org/wiki/Public-key_cryptography

在几种情况下,我发现我认为是正确的:

https://connect2id.com/products/nimbus-jose-jwt/examples/jwt-with-rsa-encryption

在这个 Java 示例中,这使用公钥来加密数据,而不是私钥。

我不知道为什么 C# 示例在客户端使用私钥,这是不合逻辑的,有人可以解释我为什么,我该如何解决这个问题?

0 投票
0 回答
635 浏览

c# - 在客户端和服务器之间生成相同的 JOSE 令牌 (PHP-C#)

好吧,我正在尝试使用这两个库生成相同的密钥:

我已经实现了两个:

在 C# 中:

这就是我加载公钥 PEM 字符串的方式:

这就是它返回的内容:

eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ.L3Teg2RSXXpp4jakLkl2PQgidJ5BIXyP5QZM2B4RaO0vs55aT22D9_dPl6d83KvXezM4YkOnyoF0JA0eLX3k8W4eWkHUhgoYqxgwQSWWhjrpDxcpNdXbDlB6zVb_BKf5upro5qm23nr_SOkkqhKJGrw_sIXvD1LjOburLolDqojrnvK5awGtiFwkPZjRh_wh4z4buEfYsWJCKhTLU6aG_DipmbAXq1o9u1-cqiQJC0JlPJRbh6JJDmVc9YqBv0W0rFEa7W5HA12TO-RtV42tEPApr3hNmD8QwzvxxZYKpMzoBAsSQcvSKk878qeOAcx3pZyoDZ6WzD-LRusWy7nJwOa6AC9NsL91mv8WsZxWar9AnzOsKleSJ7k8I477pXE_H1g7XnFBgmA4egF-721sa7SO2LtS440v1ytA4504sdjVYeOfWmRSU4UljnUqaYTd031fzCevzNEO0Q7mncn-sJACVHiwQB9c703SvYZaFOyzU-vdXUqBRTR6x0JvQd_lFNgSS9pOQC5BQbAKOME9fjdXiwRUKfyHXCUAUj88CJEMqxg3_VYYfUC04GahmoysR9QUpK3l84Z5TLOi47SvO-NkR-2wf7v4ko8bZIR3E6XFHFG9lWwdzR_JPz7fm0OFiYB0HN8XgWE4bQ2tasYsmFhWVfkeRZodnlqFvImSNjA.GIGFv4h_nYkpBiA5.1_66eMEb.BJTezaLucvfluWQ8VEzgCQ

在 PHP 中:

那么,PHP 实现如下:

它们是相似的代码,不是吗?

但是输出不同:

eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00iLCJ6aXAiOiJERUYifQ.jbNHUCuXYcXZWrHsJrPclV-fjYmFWwwPj4t3kAOt7PahQfsz0a1GaRrODcwKce4yRtLyjv2U7CtFMxt9ah3XTwIqm1mzzPMhO4LnFIRqMRgsxEgIijRqNOOpE85M3UPBRqjYw0wdjaqfJToLVLwaHgUPCkOqsHrdOOWkxN20fZYy4Z1PQAC0rk2WqLD0x7Za1jdV6LvVtd18iFIaRqf2uNYcRePdyInRxwHGp9JfRkVCQILTfwHlxQBKrwJxhZOzdHrjjNjxNsjAsHGMix6MAbUR0YT4hlrE59eriDVxix4uQrrChuzWVz_kY9-zvB9SDZnYDdfgONYUgTMpbkMTVWsF40JmWJ6wvGs3HaaIxN17UjQLemKgrS4-bqvbnschhZTIGi5-f8Cr_SwGo411VNYhNpD4P1H2dEjmAFpn3SdW3Oi6pPgK2tvIpEwGUS-Gi29-aCCNeuyE2m5dbFW28G9HMmvZHAky4KHE4NlNJTrH0aBxQX_Gc7eTf9q00gJtKQ5CinXaUYAB0xSEbsNACZuFLPawuxj_3FGn6dHYFOkSsatCTcqV5tiGJXG6ns-wDc682-G9Mj8HCIzYzakp-yZLIaY00fg5xQdgKJrk0QbCtvbwiQGoupyMV9f3RpEBJznPrq4STypxskdh6jksB6T_1fhPqZMVt2BHR4phCBg.9380DJUDH4TQnnr7.zEuMQwRr.BfdStBMcVnVR-2ujTLjuaA

你可以在这里看到不同之处:

...

左边是 C#,右边是 PHP。你可以在那里看到它:http: //qbz28b-user.freehosting.host/html/Result.html

显然,当我尝试用 PHP 解密用 C# 生成的文本时...

...在PHP中解密的实现:

出现以下异常:

致命错误:未捕获的 InvalidArgumentException:无法解密 JWE。在 C:\xampp\htdocs\z3nth10n-PHP\libs\jose\Decrypter.php:80 堆栈跟踪:#0 C:\xampp\htdocs\z3nth10n-PHP\libs\jose\Loader.php(95): Jose\ Decrypter->decryptUsingKeySet(Object(Jose\Object\JWE), Object(Jose\Object\JWKSet), NULL) #1 C:\xampp\htdocs\z3nth10n-PHP\libs\jose\Loader.php(30): Jose \Loader->loadAndDecrypt('eyJhbGciOiJSU0E...', Object(Jose\Object\JWKSet), Array, Array, NULL) #2 C:\xampp\htdocs\z3nth10n-PHP\includes\actions.php(321): Jose\Loader->loadAndDecryptUsingKey('eyJhbGciOiJSU0E...', Object(Jose\Object\JWK), Array, Array, NULL) #3 C:\xampp\htdocs\z3nth10n-PHP\api.php(9): 包括('C:\xampp\htdocs...') #4 {main} 在第 80 行的 C:\xampp\htdocs\z3nth10n-PHP\libs\jose\Decrypter.php 中抛出

我一直在查看代码很长时间,我意识到问题不在于代码,问题在于生成的令牌。而且我不知道我能做什么,你可以在这里测试一下。

编码一个词...

...然后,解密它

有什么建议可以看吗?

0 投票
1 回答
1712 浏览

java - JOSEException:无法创建 AES/GCM/NoPadding 密码:非法密钥大小

我正在尝试使用 Nimbus JOSE + JWT 从我的私钥中解密 JWE 数据。

但是我遇到了错误:JOSEException:无法创建 AES/GCM/NoPadding 密码:非法密钥大小

有人可以帮我解决这个问题。我正在使用 Java 1.8

我的私钥

我的 JWE 数据

我的数据解密代码

获取RSA私钥的代码

Maven依赖

0 投票
1 回答
626 浏览

ios - JOSESwift jwe 加密未能在 nimbus 服务器中解码

有人成功使用过 JOSESwift 吗?在我的情况下,服务器中的解密失败,可能找不到匹配的私钥或加密错误。收到错误 500。

我的代码是从服务器获取公钥。

服务器期望 jose 标头中有一个“kid”字段,而框架中缺少该字段。所以我添加了它......后端Java服务器使用nimbus库。

我究竟做错了什么?

0 投票
1 回答
1101 浏览

json - 受保护的标头 JWS

我试图理解这篇关于 JOSE 的博客文章。在关于 JWS 的部分中,它说如下:

在受保护的标头中包含公钥不仅可以使服务器能够验证签名,而且我们还将确保它是正确的,因为受保护的标头是完整性保护的!

这是示例对象的样子:

受保护的标头是以下base64url编码:

我能找到的将公钥放入其中的唯一参考是使用 key id 字段kid,如下所示:

这是帖子所指的吗?还是它指的是其他东西(例如将整个公钥放入受保护的标头中:

0 投票
1 回答
2771 浏览

json - 结合 JWE 和 JWS

刚刚了解了 JOSE,我知道 JWE 用于加密,JWS 用于签名。我似乎无法找到一个既加密又签名的有效负载示例。

假设我有一个 payload hello world。做这样的事情是正确的吗?JWS(JWE('hello world')将加密的 JWE 作为 JWS 的有效负载?

0 投票
1 回答
117 浏览

node.js - 从 Promise 中获取结果 - Nodejs

我正在将 nodejs 与这个库 node-jose 一起使用,以允许我获取我的私钥并使用它来签名和/或解密。

所以现在的问题是这样的。我试图在生成结果后从结果中返回签名,但无法这样做。

A 点,当我执行 console.log 时,我将真正看到我的结果。除此之外,即在B 点,我无法看到我的结果。我得到的只有这个。

我做事的方式正确吗?


主.js:

0 投票
1 回答
1294 浏览

jwt - 如何在 nimbus-jose-jwt 中使 RemoteJWKSet 的缓存无效

我们正在使用nimbus-jose-jwt 第三方库中的 RemoteJWKSet 进行基于 JWKS 端点的 JWT 验证

使用 RemoteJWKSet,我们可以从远程端点检索 JWKS,并缓存检索到的 JWK 集,以最大限度地减少网络调用。它还能够在远程服务器上处理密钥轮换,因为每当密钥选择器尝试获取具有未知 KID 的密钥时,缓存都会更新。

我的问题是,假设由于安全原因,从远程 JWKS 端点中删除了一个特定的密钥集。但是当我们得到一个使用移除的密钥签名的 JWT 时,它仍然是有效的,因为该密钥集在缓存中可用(RemoteJWKSet 只会在它获得具有未知 KID 的令牌时更新缓存)。

我需要知道是否有任何可能的方法来使 RemoteJWKSet 中的缓存 JWK 集无效(如果需要重新启动服务器)?

0 投票
1 回答
298 浏览

wso2 - wso2am-2.6.0 无效的 jwt 签名

在 WSO2AM-2.6.0(6.x 分支)中为后端服务启用 JWT 签名

但是 - 开发人员抱怨签名无效(根据 JOSE 库)。我在jwt.io页面中测试了令牌,它还声称签名无效。

我从以前的版本(wso2am-2.1.0)中看到签名生成发生了变化(不使用任何外部框架),但是对于更改,其他框架(jose,jwt.io)认为签名无效

有什么方法可以配置 wso2am 以创建有效(有效)签名?

编辑:

我看到 JWT 令牌仅使用 APIMJWTGenerator 进行签名,尽管它无助于使令牌有效

例外是

验证是否与x5t标头属性有关?

Edit2:显然 xt5t 标头应包含 SHA-1 证书签名,提供的值NTA3YzJmZDk0OTg4N2ViNWRlY2M4N2NlMDdjMmNlNjliOTRkYjM1OA太长而不能成为 SHA-1 或无效

编辑3:

似乎问题与https://github.com/wso2/carbon-apimgt/issues/5535有关,该修复显然破坏了与后端服务的兼容性(以及使用的框架,准备修复)