jwt.io从何处从jwt令牌获取公钥?

jwt.io从何处从jwt令牌获取公钥?,jwt,public-key,jwt-auth,jwk,Jwt,Public Key,Jwt Auth,Jwk,我正在通过(调试器部分)解码JWT令牌,以查看头、负载。令人惊讶的是,它也进行了验证,我可以看到它(jwt.io debugger)也能够检索公钥 所以我的问题是:JWT令牌是否提供公钥以及JWT令牌的一部分 我正在粘贴它的一部分(由于安全原因,无法完全粘贴,将截断实际JWT令牌的一部分) 解码消息(再次截断) 标题 { "kid": "cJ0PzkBXPyjX7FM67jcOECIY=", "alg": "RS256

我正在通过(调试器部分)解码JWT令牌,以查看头、负载。令人惊讶的是,它也进行了验证,我可以看到它(jwt.io debugger)也能够检索公钥

所以我的问题是:JWT令牌是否提供公钥以及JWT令牌的一部分

我正在粘贴它的一部分(由于安全原因,无法完全粘贴,将截断实际JWT令牌的一部分)

解码消息(再次截断)

标题

{
  "kid": "cJ0PzkBXPyjX7FM67jcOECIY=",
  "alg": "RS256"
}
有效载荷:

{
  "sub": "13lqs0moiodvtcskvqb",  
  "token_use": "access",  
  "scope": "example.com/Manage",  
  "auth_time": 1601293,  
  "iss": "https://cognito.eu.amazonaws.com/",  
  "exp": 1601638,  
  "iat": 10353,  
  "version": 2,  
  "jti": "cc1-47d9-b6-5c6245",  
  "client_id": "nmodvtcb"  
}
在那里,可以看到公钥(截断)


jwt.io中的调试器在哪里检索公钥?我无法理解这一点。

令牌包含令牌的颁发者(iss)和密钥id(kid),用于标识验证签名所需的公钥 有了这些信息,jwt.io可以在JWKS端点(/.well-known/JWKS.json)上以JWK()的形式找到公钥,以验证令牌。JWKS()包含一个JWKS数组,该链接显示了一个示例

根据,当您使用Amazon用户池对您的用户进行身份验证时,将使用此机制


通过jwks端点提供密钥是一种标准机制,其他提供商也使用这种机制,例如Microsoft Azure。

我自己也一直试图理解这一点。如果打开开发人员工具并在调试器页面中粘贴令牌时看到jwt.io发出的请求,您将看到它发出其他请求

在我看来,国际空间站是:

"iss": "http://localhost:8080/auth/realms/myrealm"
因此,jwt.io添加了标准路径
/。众所周知的/openid配置
,并向

http://localhost:8080/auth/realms/myrealm/.well-known/openid-configuration
它在json中找到了很多信息,其中有jwks_uri

{
...
"jwks_uri": "http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/certs",
...
}
然后有另一个对上述url的XHR请求,响应是jwks。
拥有该公钥,jwt.io可以验证令牌。至少我认为会发生这种情况。

我认为您不需要密钥来解码JWT令牌。它们都遵循行业标准,任何人都可以解码。由于您没有在令牌中传递任何敏感信息,因此这不是一个风险(除非您让它被知道如何使用它登录到您的帐户的人偷走)。有许多解码器可以做同样的事情,等等。密钥当然不是用来解码令牌,而是用来验证签名。令牌本身只是base64url编码的。因此,如果我理解正确,它来自“kid”和“iss”,它将获取公钥以验证JWT令牌的签名?Cognito必须在令牌中提供这些细节吗?如果可能的话,你能再详细一点吗?哈哈哈。是的,这确实发生了+这是我的荣幸
http://localhost:8080/auth/realms/myrealm/.well-known/openid-configuration
{
...
"jwks_uri": "http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/certs",
...
}