JWT.io是如何知道我的公钥的?

JWT.io是如何知道我的公钥的?,jwt,rsa,Jwt,Rsa,我的JSON Web令牌(JWT): 当我将这个令牌粘贴到jwt.io中时,它会自动填充一个公钥,并表示令牌上的签名已经过验证。它如何知道公钥?来自JWT当前最佳实践: 确定发卡机构拥有的密钥的方法是应用程序- 具体的例如,OpenID连接颁发者值 是引用包含以下内容的JSON元数据文档的httpsURL 一个jwks_uri值,它是一个httpsURL,发卡机构的密钥来自该URL 作为JWK集()检索。同样的机制也适用于 ietf oauth发现。其他应用程序可能使用不同的 向发行人绑定密钥的

我的JSON Web令牌(JWT):


当我将这个令牌粘贴到
jwt.io
中时,它会自动填充一个公钥,并表示令牌上的签名已经过验证。它如何知道公钥?

来自JWT当前最佳实践:

确定发卡机构拥有的密钥的方法是应用程序- 具体的例如,OpenID连接颁发者值 是引用包含以下内容的JSON元数据文档的
https
URL 一个
jwks_uri
值,它是一个
https
URL,发卡机构的密钥来自该URL 作为JWK集()检索。同样的机制也适用于
ietf oauth发现
。其他应用程序可能使用不同的 向发行人绑定密钥的方式

规范中记录了OpenID Connect(OIDC)提供程序元数据位置

支持发现的OpenID提供程序必须生成JSON文档 在通过连接字符串形成的路径上可用
/。向
发行人提供众所周知的/openid配置
。语法和语法
的语义。众所周知的
在中定义并应用 当不包含路径组件时,发送到
颁发者

您的令牌的有效负载是

{
“澳元”:https://management.azure.com/",
“国际空间站”:https://sts.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/",
“iat”:1563406664,
“nbf”:1563406664,
“经验”:1563410564,
“aio”:“42FgYBBtfzSr7br/p4tqeqdl/2wNBgA=”,
“appid”:“f1f6d55e-cf2c-422d-b186-848624db95e8”,
“应用程序”:“2”,
“国内流离失所者”:https://sts.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/",
“oid”:“df9dff8d-bcb5-4b17-8cec-4be1a01f9212”,
“子项”:“df9dff8d-bcb5-4b17-8cec-4be1a01f9212”,
“tid”:“72f988bf-86f1-41af-91ab-2d7cd011db47”,
“uti”:“hi01-8YRUEMLCXM9L3ZAA”,
“版本”:“1.0”
}
发行人
iss
索赔表示。如果您获取
iss
的值,将
/.众所周知的/openid配置
附加到它并将弹出到浏览器中,您将看到OIDC提供程序元数据。此元数据文档中的一个键是
jwks_uri
,它指向另一个具有JSON Web键集的文档。后者是一组JSON Web键(JWK)。JWK是加密密钥的JSON表示。为了识别集合中所需的JWK,使用相关令牌中的声明
x5t
(X.509证书的SHA-1指纹)和/或
kid
(密钥id/别名/名称)


jwt.io
通过基于
iss
声明提取OIDC元数据,成功地欺骗了整个序列的第一步。如果JWT是由不使用OpenID Connect和/或未实现所有这些相关规范的服务发布的,
JWT.io
将无法找到验证签名的密钥。

谢谢!我尝试在C++中实现某些验证JWT令牌的方法,这有帮助。答案的最后一行有重要的信息:“如果JWT是由一个没有OpenID连接的服务发布的,和/或没有实现所有这些相关规范(OIDC规范),JWT.IO就不会找到验证签名的密钥。”
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InU0T2ZORlBId0VCb3NIanRyYXVPYlY4NExuWSIsImtpZCI6InU0T2ZORlBId0VCb3NIanRyYXVPYlY4NExuWSJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuYXp1cmUuY29tLyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0Ny8iLCJpYXQiOjE1NjM0MDY2NjQsIm5iZiI6MTU2MzQwNjY2NCwiZXhwIjoxNTYzNDEwNTY0LCJhaW8iOiI0MkZnWUJCdGZ6U3I3YnIvcDR0cWVxZGwvMndOQmdBPSIsImFwcGlkIjoiZjFmNmQ1NWUtY2YyYy00MjJkLWIxODYtODQ4NjI0ZGI5NWU4IiwiYXBwaWRhY3IiOiIyIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNzJmOTg4YmYtODZmMS00MWFmLTkxYWItMmQ3Y2QwMTFkYjQ3LyIsIm9pZCI6ImRmOWRmZjhkLWJjYjUtNGIxNy04Y2VjLTRiZTFhMDFmOTIxMiIsInN1YiI6ImRmOWRmZjhkLWJjYjUtNGIxNy04Y2VjLTRiZTFhMDFmOTIxMiIsInRpZCI6IjcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0NyIsInV0aSI6ImhpMDEtOFlSdUVtTExjeE05TDN6QUEiLCJ2ZXIiOiIxLjAifQ.kwfGrWiQwqhJpZfryW9D1hHDC2AC6tUT16OXkmlIeyxTMqY0gdO0U3KClYczDzMs6kpXc5sQOBaTrBQgERnfKf1nqrHoDmHzaKmY20LKByMopH9uhcPF3lkDNW--dfruNHywF6DZ4cLtgSWcZOBs_BAwQqy1i5Hja7WNf5InyhyscXjUdntIz9rK599IzvD8MwkgYViMEXATNNh2CvEqRp-AZxVjCP_cI6h9Lx3j8__9xRIoWIwnv_rqHGcPpg6hJMfUJMtlLjJaBo0h0veCCZj-fUORidN7EPHNSw9IJF29-nGhw6rmkcD7F8q6WpK8dUfiYGk_QxOCRTw9gpkKKA