入门级问题(我是JWT /加密的新手)
我的令牌:eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InU0T2ZORlBId0VCb3NIanRyYXVPYlY4NExuWSIsImtpZCI6InU0T2ZORlBId0VCb3NIanRyYXVPYlY4NExuWSJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuYXp1cmUuY29tLyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0Ny8iLCJpYXQiOjE1NjM0MDY2NjQsIm5iZiI6MTU2MzQwNjY2NCwiZXhwIjoxNTYzNDEwNTY0LCJhaW8iOiI0MkZnWUJCdGZ6U3I3YnIvcDR0cWVxZGwvMndOQmdBPSIsImFwcGlkIjoiZjFmNmQ1NWUtY2YyYy00MjJkLWIxODYtODQ4NjI0ZGI5NWU4IiwiYXBwaWRhY3IiOiIyIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNzJmOTg4YmYtODZmMS00MWFmLTkxYWItMmQ3Y2QwMTFkYjQ3LyIsIm9pZCI6ImRmOWRmZjhkLWJjYjUtNGIxNy04Y2VjLTRiZTFhMDFmOTIxMiIsInN1YiI6ImRmOWRmZjhkLWJjYjUtNGIxNy04Y2VjLTRiZTFhMDFmOTIxMiIsInRpZCI6IjcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0NyIsInV0aSI6ImhpMDEtOFlSdUVtTExjeE05TDN6QUEiLCJ2ZXIiOiIxLjAifQ.kwfGrWiQwqhJpZfryW9D1hHDC2AC6tUT16OXkmlIeyxTMqY0gdO0U3KClYczDzMs6kpXc5sQOBaTrBQgERnfKf1nqrHoDmHzaKmY20LKByMopH9uhcPF3lkDNW - dfruNHywF6DZ4cLtgSWcZOBs_BAwQqy1i5Hja7WNf5Inyhy scXjUdntIz9rK599IzvD8MwkgYViMEXATNNh2CvEqRp-AZxVjCP_cI6h9Lx3j8__9xRIoWIwnv_rqHGcPpg6hJMfUJMtlLjJaBo0h0veCCZjPkWKNK9WKNW9W
当我将其粘贴到jwt.io时,它会自动填写一些公钥并表示已通过验证。它怎么知道公钥?
答案 0 :(得分:3)
来自JWT Best Current Practices (BCP)(2019年6月6日草稿):
确定发行者拥有的密钥的方法是应用- 具体。例如,OpenID Connect发行者值 是引用包含以下内容的JSON元数据文档的“ https” URL “ jwks_uri”值,它是发行者的密钥所使用的“ https” URL 被检索为JWK集[RFC7517]。使用相同的机制 ietf-oauth-发现。其他应用程序可能使用不同的 将密钥绑定到发行者的方法。
OpenID Connect(OIDC)提供程序元数据位置记录在OIDC Discovery spec
中支持发现的OpenID提供者必须制作JSON文档 在连接字符串形成的路径上可用
/.well-known/openid-configuration
发给发行人。语法和 .well-known的语义在RFC 5785中定义并适用 当它不包含路径成分时,设置为发卡行值。
如果您采用iss
声明的值,请在其后附加/.well-known/openid-configuration
并将resulting URL弹出到浏览器中,您将看到OIDC提供程序元数据。此元数据文档中的一个键是jwks_uri
,它指向另一个带有JSON Web密钥集的文档。后者是一组JSON Web密钥(JWK)。 JWK是加密密钥的JSON表示形式。为了标识集合中的正确JWK,请声明令牌中的声明x5t
(证书/公钥的X.509指纹)和/或kid
(密钥别名,通常与指纹相同)有问题的被使用。
jwt.io通过基于iss
声明提取OIDC元数据,成功欺骗了整个序列的第一步。如果JWT是由不使用OpenID Connect和/或未实现所有这些相关规范的服务发行的,则jwt.io将找不到用于验证签名的密钥。