jwt - jwt.io 从哪里获取 JWT token 的公钥?

标签 jwt public-key jwt-auth jwk

我正在通过 jwt.io(在调试器部分)解码 JWT token 以查看标题、有效负载。令人惊讶的是,它还验证了,我可以看到它(jwt.io 调试器)也能够检索公钥。
所以我的问题是:JWT token 是否提供公钥以及 JWT token 的一部分?
我正在粘贴其中的一部分(由于安全原因无法完整粘贴,将截断实际 JWT token 的一部分)

F3cy5jb21cL2V1LXdlc3QtMV9ZckVRYjY5Z1giLCJleHAiOjE2MDE2Mzg4OTMsImlhdCI6MTYwMTYzNTI5MywidmVyc2lvbiI6MiwianRpIjoiNmI2YmZiNmYtY2M0MS00N2Q5LWI0YzYtOTBmOGFmNWM2MjQ1IiwiY2xpZW50X2lkIjoiMTM0MWxxa3N1ZmUwbm1vaW9kdnRjc2t2cWIifQ.RtKfz54uBgSZ1gc4KRPjzL4dPe5AbH2YMJu-DDvIxBzgMjqT9q4ApGzcWYB62-MgDUf-F_hK0kF9eIwAi9fARhp 0HGGnyiuydW_our6zE3EphLvXQByTDY5xzOUuSvt7WbDZWeSfpHcjrBttRSJAPOsZ2gInafKjZgWKyGL4vJB9swEhOMSSpTQDGWKenJCyp4emhe8E4XGzYTo9WEb-Wqg6sI__LrusDNd917FaocPKBxA
解码消息(再次被截断)
标题
{
  "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"  
}
在那里,可以看到 公钥 (截断)

-----BEGIN PUBLIC KEY-----
QEFAAOCAQ8AMIIBCxmf9bakWk
556KYmIZB+Sy1ftkkGa4qlUsmRvcG2Hll+7HBWp1ao6MVLskjdaaKg8iH1Iz4DKG
lgqT/ndwhoxvTBuvm0X2CZoNzZn4S8wDTr78m/S/YegZRhv6y58gkiKSEmbbC/g5
Bp+AF88NwBvLm1jdd
-----END PUBLIC KEY-----

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

最佳答案

token 包含 token 的发行者 (iss) 和 key id (kid),它标识验证签名所需的公钥
有了这些信息,jwt.io 可以在 JWKS 端点 (/.well-known/jwks.json) 上找到 JWK ( JSON Web Key ) 形式的公钥,以验证 token 。 JWKS ( JSON Web Key Set ) 包含一组 JWK,链接显示了一个示例。
根据 cognito documentation ,当您使用 Amazon 用户池对您的用户进行身份验证时,将使用此机制。
通过 jwks 端点提供 key 是其他提供者也使用的标准机制,例如微软 Azure。

关于jwt - jwt.io 从哪里获取 JWT token 的公钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64297228/

相关文章:

javascript - 检查前端每个请求的 token 过期

node.js - Angular 4 HTTP GET 不包括 HTTP header 中用于授权的 JWT

java - 使用公钥验证签名

ssl - 我在哪里可以获得所有流行的证书颁发机构的公钥

android - 如何从 Firebase.auth.currentUser Android Kotlin 获取刷新 token

php - 如何使用Laravel实现微服务和API网关之间的认证和授权

asp.net-core - 如果与 JWT 承载身份验证一起使用,Asp.Net 核心 Web API 防伪验证将失败

file - 如何将我的 SSH 公钥发送给某人?

api - 具有 API key 和 JWT token 的 Net Core API

android - Flutter:如何在两个单独的android应用之间安全地共享数据?