问题标签 [jwk]

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 回答
332 浏览

security - 为什么 jwks(JSON Web Key Sets) 标准不只是以 pem 形式传递公钥而不是使用模数和指数?

根据JWKS 标准,公开密钥的格式为

我们为什么不这样做呢?

这样做有什么具体原因吗?是因为Timing attack这种格式以及如何帮助定时攻击?

0 投票
1 回答
207 浏览

oauth-2.0 - 使用 ServiceStack 进行自定义 JWT 验证,无需用户凭据

我是 ServiceStack 的新手,并使用它来提供一个端点,该端点将接收来自远程服务的传入请求。不涉及最终用户。

身份验证流程如下(由远程服务的作者指定):

  1. “他们的”远程服务调用“我们的”端点,标头中有 JWT
  2. “我们的”端点从 JWT 中提取“孩子”
  3. “我们的”端点调用“他们的”oauth 端点,以 'kid' 作为参数
  4. “他们的”oauth 端点以 JWK (RS256) 的形式返回公钥
  5. “我们的”端点使用 JWK 验证 JWT 签名

ServiceStack 是否支持此身份验证流程?

我想我需要编写代码来挂钩请求的身份验证并执行上面的步骤 2-5。是对的吗?

编辑: 我发现这个答案看起来就是我所追求的,即使用上面的步骤 2-5 覆盖 PreAuthenticate 的自定义 AuthProvider。

然后在 ApplicationHost.Configure() 中:

这种方法看起来对吗?我需要手动进行 JWT 身份验证,还是可以更多地利用 ServiceStack 的内置功能和插件?

0 投票
1 回答
385 浏览

go - Golang rsa-oaep 解密失败,前端使用 webcrypto

我有这个用 Golang 编写的应用程序作为后端,Typescript 作为前端。我需要对传输的数据进行加密所以我选择RSA加密,基本上步骤如下:

* 后端 *

  1. golang生成私钥和公钥,保存在redis中
  2. Golang 使用lestrrat-go/jwx/将公钥转换为 JWK(json web key)
  3. Golang 发送 JWK

* 前端 *

  1. Typescript 使用 Webcrypto API 导入 JWK 密钥
  2. Typescript 使用导入的密钥加密一些纯文本
  3. 加密后,我得到一个 ArrayBuffer,为了防止出现任何编码问题,然后我将 ArrayBuffer 字节转换为整数数组
  4. 将转换后的整数数组发送到字符串化 JSON 中的后端

* 后端 *

  1. Golang 接收 JSON 并将整数数组转换为[]byte
  2. 从redis中检索私钥然后解密

现在我得到的只是一个decryption error...

我检查过的事情:

  • 后端 Golang 单独加密/解密就好了
  • 前端 webcrypto 单独加密/解密就好了
  • 检查 golang rsa.PublicKey -> JWK 期间是否出现任何问题

    1. 如果前端从后端获取 jwk
    2. 导入它
    3. 然后导出
    4. 将导出的密钥发送回后端
    5. 后端将jwk转回rsa公钥,等于redis中保存的公钥
  • 后端收到 int 数组并转换为 后[]byte,它的长度和内容等于前端的

代码如下:

更新

在此处添加一些打印日志:

  • 后端:
  • 前端:
0 投票
1 回答
4847 浏览

validation - 如何在 Dot Net Core 中使用 JWKS 验证 JWT 令牌

在 C# 中,我需要针对 JWKS 验证承载令牌(Json 对象表示如下所示的一组键)

0 投票
1 回答
709 浏览

jwt - 当带有 JWKS URL 的验证令牌时,Keycloak 与外部身份提供者的集成失败

我在我的 Keycloak 实例中配置了一个外部身份提供者,并试图让它使用外部 JWKS URL 来验证令牌。使用从 JWKS 转换的 PEM 工作正常,使用 URL 不起作用。

登录时令牌验证失败,并显示以下消息:

我调试了 Keycloak 服务器,获得了更多关于该问题的信息,并在类中发现了一个“问题” JWKSUtils

if失败并带有 a ,NullPointerException因为调用jwk.getPublicKeyUse()返回null

但我发现这是因为 JWKS URL 返回一个没有属性usenull的单个键,根据规范,这是可选的。[https://www.rfc-editor.org/rfc/rfc7517#section-4.2]

Keycloak 仅接受 JWKS URL,这些 URL 返回所有已定义属性使用的键。但是我尝试连接的 IdP 不会在密钥中返回该属性。

鉴于这种情况,我应该向谁提出问题,IdP 还是 Keycloak?还是我在配置中做错了什么?

0 投票
1 回答
454 浏览

ssl - 如何从以 PEM 格式编码的 CRT 创建 JWKs 密钥

我有一个 CRT 文件:

例子:

我知道这个 CRT 是用 PEM 编码的。但是我想从这个文件创建一个 JWK 密钥我应该怎么做呢?

0 投票
1 回答
986 浏览

java - 如何在 Spring Security oauth 中修复不安全的 jwt-set-uri?

我使用 keycloak 作为授权服务器,使用 spring boot 应用程序作为资源服务器。Keycloak 与自签名 TLS一起使用。当我打开 keycloak jwk-set-uri 时,它看起来如下:

在此处输入图像描述

json格式的响应如下:

JwtDecoderbean定义如下:

当我用模式设置 jwkSetUri 时https,应用程序不能正常工作,但是如果我用http模式设置它,应用程序可以正常工作。问题出在哪里?我该如何解决?

0 投票
1 回答
198 浏览

javascript - JSON Web 密钥的“ext”属性是什么?

我正在使用带有以下代码的浏览器加密 API生成和导出 JSON Web 密钥 (jwk)(请参阅RFC 7517 ) (感谢GitHub 上这个出色的 webCrypto 示例页面):

我得到的是一个带有许多属性的 JSON 对象,与MDN 文档中的非常相似,看起来像这样:

所有上述属性都在上面链接的 RFC 中定义,除了ext. 我查看了许多来源(包括但不仅是 MDN 和 RFC),但似乎找不到定义。虽然一切都很好,只是按照上面的定义保留它,但我更愿意(特别是对于类似的东西crypto)知道一切都是为了什么。那么,extjwk 属性的目的是什么?

0 投票
2 回答
531 浏览

javascript - 如何在 JWK 响应 (PHP) 中获取密钥 ID 值

我在服务器端生成一个公钥以传递给客户端以呈现 iframe(由第三方托管)。

我从 JWK 响应中获取了大量数据,但我只需要keyID值。

{ "数据": "{\"keyId\":\"eyJraWQiOiIzZyIsImFsZyI6IlJTMjU2In0.eyJmbHgiOnsicGF0aCI6Ii9mbGV4L3YxL3Rva2Vucz9mb3JtYXRcdTAwM2RKV0UiLCJkYXRhIjoiOFZ6WnhyUHd2b1dRb1I0QTVTRWNteEFBRUliNlJsT1YzdGU4UUxGdmEwb08wTEliWkhtWmE4Z2ZqT0lSWklmS1FaUElRYmhaZHVlRFNwQzZZZllUanF0cU94d2xtUVlQa1FzZUcrL05WUGlBbUZUdGtUNjlUbXAyb3pEOWJqT0NyVFlQIiwib3JpZ2luIjoiaHR0cHM6Ly90ZXN0ZmxleC5jeWJlcnNvdXJjZS5jb20iLCJqd2siOnsia3R5IjoiUlNBIiwiZSI6IkFRQUIiLCJ1c2UiOiJlbmMiLCJuIjoiaGNLRlU5UllCR0VwY1JyR3FQQ2J1U3BlOFdyeTRRUUNvMUdiRml4ZHdWMUtuN09BMHQtRDdXM2tvUjN6MDc3UndnYnBldTdvbV8xd0ZrRjVRLTBNeVNfdzk3TklmaVk1OVNLb3JqdWhfQmt2NHdJVGVUbm9LN2ZROHJyOTJSOUNKTFp6UFdlUVJPMDVxeWxiLVdVWUJvOU5sa2QwZHl6b2RlbEoxWVRzQ1JzYlRVc0ZRMUxKZHVIWWw0X3kzTF9FbnkwaG1mSFg5cll4U2ozamhmZVpZYVhYa0wtdERCa2k5VF9zXzhzb19RQjNLN29oR2tqSDU1TUQwRkdDNzVpRS1UcmtqNFd0cWNyYjI3S3BNSzdXWm1qSnJUMFE0bzlMMTBURXJvZE1HeEpfTm5IMGdSYmUwTFVSOWhaVnUzMG9tWkdrQVhfQXhUa1VJWktXQzZENkJ3Iiwia2lkIjoiMDd1SlMwT0dpR2pObzF6ejRTbGFpZUIzQkprSWc1bVAifX0sImN0eCI6W3siZGF0YSI6eyJ0YXJnZXRPcmlnaW5zIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MiJdLCJtZk9yaWdpbiI6Imh0dHBzOi8vdGVzdGZsZXguY3liZXJzb3VyY2UuY29tIn0sInR5cGUiOiJtZi0wLjExLjAifV0sImlzcyI6IkZsZXggQVBJIiwiZXhwIjoxNTgwMTg5NDA2LCJpYXQiOjE1ODAxODg1MDYsImp0aSI6InNYYWNWSm43bkI1a1ZvSnIifQ.Hr-DwfFv-90bBtUWhACXwkhVFefh7fNOV9FS5Epu5fcL7Ji_pE9GHQIhaX5F31VM-EAOz55gG0eYnEu7ZAptR1mq3WgxNx3Af9ngKpbl4ZTb9cUxjGf3DdGJ1-J26aziJx3GcaZREfFyabDWbThyKlGTxSbnGHb7-UcQ_MPmh-znt_691y_gX9Qo8fe6XeJw8-Ir4XwwznjNLa31-EctYfnYUbfOnjR_8rfuFNnulvQecHs1e4zFVVAqm8mqex-umdlPbPUGT8xzYN-G0oLMdj3uMAAeSuyrdAifVXWSXyyyBHU5rIp-8anGWj_9RQrwvOH7MOIerV3Lej1-lEOxTw\",\"der\":null,\"jwk\":null}" }}}Hr-DwfFv-90bBtUWhACXwkhVFefh7fNOV9FS5Epu5fcL7Ji_pE9GHQIhaX5F31VM-EAOz55gG0eYnEu7ZAptR1mq3WgxNx3Af9ngKpbl4ZTb9cUxjGf3DdGJ1-J26aziJx3GcaZREfFyabDWbThyKlGTxSbnGHb7-UcQ_MPmh-znt_691y_gX9Qo8fe6XeJw8-Ir4XwwznjNLa31-EctYfnYUbfOnjR_8rfuFNnulvQecHs1e4zFVVAqm8mqex-umdlPbPUGT8xzYN-G0oLMdj3uMAAeSuyrdAifVXWSXyyyBHU5rIp-8anGWj_9RQrwvOH7MOIerV3Lej1-lEOxTw\",\"der\":null,\"jwk\":null}" }Hr-DwfFv-90bBtUWhACXwkhVFefh7fNOV9FS5Epu5fcL7Ji_pE9GHQIhaX5F31VM-EAOz55gG0eYnEu7ZAptR1mq3WgxNx3Af9ngKpbl4ZTb9cUxjGf3DdGJ1-J26aziJx3GcaZREfFyabDWbThyKlGTxSbnGHb7-UcQ_MPmh-znt_691y_gX9Qo8fe6XeJw8-Ir4XwwznjNLa31-EctYfnYUbfOnjR_8rfuFNnulvQecHs1e4zFVVAqm8mqex-umdlPbPUGT8xzYN-G0oLMdj3uMAAeSuyrdAifVXWSXyyyBHU5rIp-8anGWj_9RQrwvOH7MOIerV3Lej1-lEOxTw\",\"der\":null,\"jwk\":null}" }

我需要 keyID 值并将其传递给客户端的一个名为“captureContext”的变量。

这是我的客户端代码,但它向我返回了上面的所有数据:

这就是我在服务器端生成公钥的方式:

希望你能帮帮我!先感谢您!

0 投票
0 回答
162 浏览

c# - 使用 JWK 签名创建 JWT

我正在使用 .Net Framework 学习令牌。我似乎找不到的一件事是如何创建一个带有 JWK 签名的令牌。我发现大量文章解释了如何使用 JWKS 验证 JWT,以及如何使用 RSA 或 HMAC 签署 JWT。

我尝试使用像 BouncyCastle 和 jose-jwt 这样的库,但是 JWK 的格式编码不同,并且不会被接受。我使用 ssh-keygen RSA 密钥成功创建并签名了令牌,但我无法从这些密钥中获取用于解码的 CRT 变量。

我希望只使用 JWK 生成的密钥并使用它们,就像我使用 ssh-keygen 一样