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

jwt - 在 JWT 标头中设置为“孩子”的值是什么

根据JWK 规范,“孩子”的定义如下。

“kid”(密钥 ID)参数用于匹配特定密钥。例如,这
用于在密钥翻转期间在 JWK 集中的一组密钥中进行选择。“kid”值的结构
未指定。当在 JWK 集中使用“kid”值时,JWK 集中的不同
键应该使用不同的“kid”值。(
不同的键可能使用相同的“kid”值的一个例子是,如果
它们具有不同的“kty”(键类型)值,但被使用它们的应用程序认为是
等效的替代方案。)“kid”
值是一种情况-敏感字符串。该成员的使用是可选的。
当与 JWS 或 JWE 一起使用时,“孩子”

我们可以在这里使用证书指纹作为“孩子”值,因为它直接标识用于签署 JWT 的密钥吗?使用证书指纹作为“孩子”而不是随机字符串有什么缺点?

0 投票
1 回答
4599 浏览

encryption - 如何从 RSA JWK 中提取公钥和私钥?

我正在尝试使用我提供的 JWK 签署一些数据。

到目前为止,我已经尝试用 jwt.io 做到这一点,标题是

有效载荷是

现在要签署这个我需要一个公钥和一个私钥。我被告知要从提供的 JWK 中提取这些,但我似乎只能从中提取公钥。

我使用过 jwk-to-pem,但是当提供 JWK 时,它只会输出公钥。但是要使用 RS256 签名,我需要一个公钥和一个私钥,我认为私钥已嵌入到 JWK 中,但我似乎无法提取它。

所以我的问题是,如何从 JWK 中提取公钥和私钥?

JWK 看起来像这样:

0 投票
3 回答
9428 浏览

java - 从 (RSA) PublicKey 手动创建 JWK

我需要将 RSA PublicKey 转换为有效的 JWK。特别是 JWK 的值“n”和“e”是我正在努力解决的问题。在查看https://www.rfc-editor.org/rfc/rfc7517#page-25上的示例 JWK 时,编码似乎不正确

目前我的代码看起来基本上是这样的:

然而,输出似乎没有被正确编码或其他东西,e例如看起来像这样:NjU1Mzc=

n不包括特殊字符,如-,_+. :

我是否正确地假设值 n 和 e 都没有正确编码?我应该如何将 PublicKey 转换为 JWK?(不能使用 3rd 方库)

0 投票
1 回答
2466 浏览

go - 缓存 auth0 JWK 是不是一个坏主意

我正在使用 auth0,我有两个客户端(ios,react)和一个使用go-auth0的 Go 后端 API 。

我按照文档制作了一个如下所示的Verify方法:

不幸的是,我注意到第一次验证需要大约 400 毫秒,后续验证需要大约 50 毫秒。

但是,如果我用验证器的字段初始化一个结构,将所有设置代码移动到一个Initialize()中,那么它只需要大约 1 毫秒:

这是一个坏主意吗?我今天只是在学习 JWK 并查看 auth0 代码,它们似乎确实构建了一个缓存,但我并不完全理解它是如何工作的。

有人可以让我知道将配置移动到结构中并使用它的验证器是一个好主意吗?

更新

auth0 有一个内置的方法来做到这一点!这是一个例子:

auth0.NewJWKClientWithCache(auth0.JWKClientOptions{URI: a.issuer + ".well-known/jwks.json"}, nil, auth0.NewMemoryKeyCacher(time.Duration(10)*time.Second, 5))

使用此方法,以便为您缓存!:)

0 投票
0 回答
1421 浏览

.net - .Net Core JwtBearer 中间件使用 Amazon Cognito

所以我在 .net Core Angular 应用程序中使用 Cognito(使用 amazon-javascript-sdk),并尝试在我的 .net 核心后端验证我从亚马逊获得的 access_token,以便我可以保护我的 Web Api . 使用 Amazon cognito JWKS 我能够验证 access_token 并因此允许/拒绝访问我的 api。问题是我现在在我的 startup.cs 中硬编码了 JWK 密钥。我从 JWKS 了解到的是这些密钥可以旋转(没有找到亚马逊是否这样做)所以我想以某种方式告诉我的中间件从端点获取密钥。我阅读了有关发现文档和其他内容的内容,但找不到有关如何配置中间件以自动执行此操作的任何内容。

对于 OpenId,您可以使用 MetadataAddress 指向https://cognito-idp .{awsregion}.amazonaws.com/{userPool}/.well-known/openid-configuration,这将获得所有必要的配置。如果您使用 JwtBearer 中间件,我觉得 IssuerSigningKey(JWK) 应该存在类似的东西。我不希望设置硬编码的密钥,而是指向中间件将在其中找到密钥并发挥作用的 JWK url。JWKS 还包含多个密钥,因此我希望中间件能够自行确定要使用哪个密钥。

相关代码:

解决方案

对于任何有兴趣的人,在互联网上搜索更多内容后,我找到了解决方案。使用 amazon openid-configuration,可在此处获得:https://cognito-idp .{region}.amazonaws.com/{UserPoolId}/.well-known/openid-configuration 您可以使用 Configurationmanager 获取 SecurityKey。在 TokenValidationParameters 中,您可以将 IssuerSigningKeys 设置为您从配置管理器获得的密钥。这篇文章对找到解决方案也很有帮助https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide

0 投票
1 回答
641 浏览

.net - C# 或 VB 使用手动创建的 JWK 验证 JWT

发疯,因为我得到“IDX10511:签名验证失败。密钥尝试...”当我尝试按照下面的验证。我已经尝试了一个直接的 JsonWebKey 并转换为 RSA 并产生相同的错误。在 javascript 中手动验证令牌和 JWK。:

0 投票
1 回答
635 浏览

node.js - 无法使用带有 node-jose 的 base 64 密钥创建解密

我正在尝试使用node-jose来解密 JWE,但是在使用密钥的 base64 作为密钥时遇到了问题(作为外部 API 指示我这样做)。

这将返回以下错误:

Error: no key found

我在初始化密钥时做错了什么吗?任何帮助将非常感激。

0 投票
3 回答
10691 浏览

.net-core - 如何使用 .AddJwtBearer() 在 .NET Core Web API 中验证 AWS Cognito JWT

我在弄清楚如何在我的 .NET Core Web API 中验证 AWS Cognito 提供给客户端的 JWT 时遇到了一些麻烦。

我不仅不知道变量Microsoft.IdentityModel.Tokens.TokenValidationParameters应该是什么,而且一旦我终于知道了,我不知道如何从中检索 JWT 密钥集https://cognito-idp.{region}.amazonaws.com/{pool ID}/.well-known/jwks.json

最后,尽管进行了大量随机谷歌搜索和反复试验,我找到了一个(看似不是非常有效的解决方案)的解决方案。然而,我花了太多时间去做这件事。引用这一点,再加上 AWS 文档严重缺乏这一事实,我决定发布此问答,以帮助其他人在未来更轻松地找到此解决方案。

如果有更好的方法可以做到这一点,有人告诉我,因为除了下面列出的答案之外,我还没有找到一种方法来做到这一点。

0 投票
0 回答
831 浏览

java - spring-security-oauth2 中是否支持 JWT 签名/加密?

我正在使用 spring-security-oauth2 实现 OAuth2 授权服务器。服务器配置为发出 JWT,到目前为止工作正常。

现在我想签署令牌。有很多代码和示例可用于在客户端验证令牌和签名。

我的问题: spring-security 是否提供了一个 API 来以一种简单易用的方式创建此类令牌?

详细信息: 如果我正确理解规范,授权服务器可能会发出这样的 JWT:

和一些 HTTP 端点,例如/.well-known/jwks.json

请注意kid属性。

虽然在设置过程中通过调用 ) 很容易签署令牌JwtAccessTokenConverter.setKeyPair(KeyPair,但我找不到任何支持来发布密钥。

里面有JwtAccessTokenConverter.encode(OAuth2AccessToken, OAuth2Authentication)一个电话org.springframework.security.jwt.JwtHelper.encode(CharSequence, Signer)

我可以复制JwtAccessTokenConverter并迁移该调用JwtHelper.encode(CharSequence, Signer, Map<String, String>)kid手动提供,但这个解决方案听起来有点......不舒服。

任何建议都将不胜感激。

0 投票
0 回答
1380 浏览

java - 试图从 Java 中的 jwk 获取公钥

我正在尝试在我的 API 中验证来自 AzureAD 的 JWT 上的签名。我检索公钥的端点在这里:https ://login.microsoftonline.com/common/discovery/keys

到目前为止,我已经尝试使用 Auth0 库 ( https://github.com/auth0/java-jwt )和 Nimbusds 库 ( https://connect2id.com/products/nimbus-jose-jwt/download ) 但我看不到如何将 JWK 以它所在的形式(字符串)实际转换为可以操作的对象。

Nimubs 似乎是更有前途的选择,因为它有一种方法可以用来从 JWK 中提取公钥......

这看起来或多或少像我需要的,但我不确定如何从提供的字符串中设置我的 JWK 对象列表。

谢谢。