Oauth 如何使用jwt.io手动验证从自定义授权服务器获得的令牌?

Oauth 如何使用jwt.io手动验证从自定义授权服务器获得的令牌?,oauth,oauth-2.0,jwt,openid,identityserver4,Oauth,Oauth 2.0,Jwt,Openid,Identityserver4,通过试验ASP.NET内核和IdentityServer4,我了解了OAuth2和OpenID Connect。到目前为止,我通过遵循我的课程创建了一个受保护的API服务器、一个授权服务器和一个客户机。当客户端能够从授权服务器获取访问令牌并使用它访问ASP.NET核心Web API项目中受保护的API时,一切都很顺利 但是,我很好奇如何手动验证从授权服务器获得的JWT。我得到的代币是: Eyjhbgcioijzzzzzzzjmjmwyxndeztg4ogeyiiwiwiidhjoilduin0.

通过试验ASP.NET内核和IdentityServer4,我了解了OAuth2和OpenID Connect。到目前为止,我通过遵循我的课程创建了一个受保护的API服务器、一个授权服务器和一个客户机。当客户端能够从授权服务器获取访问令牌并使用它访问ASP.NET核心Web API项目中受保护的API时,一切都很顺利

但是,我很好奇如何手动验证从授权服务器获得的JWT。我得到的代币是:

Eyjhbgcioijzzzzzzzjmjmwyxndeztg4ogeyiiwiwiidhjoilduin0.Eyjuyyyyyoznzmzmzmzmzmzmzc4c6mZizyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzzzmzmzmzmzmzmzmzzmzmzmzmzc4c6czc6c6mzmzmzc6mzmzc6mzmzczczczzmzmzyzyzyzzyzyzzyzmzyzzzyzzzzyzzyzyzyzzyzzzzyzyzyzyzzyzzzzyzyzyzyzzzzzzzzCHKCEZINSPIS20AZ5HKKKKRBH72IHQC2U9TOQOBCT4OKSPIUKGMGY2YPMNCQPZPAOPIVMKKKKKKKKKNHIJ-lhTv7pzaSXmFFSSpih-eigk4243VkGz8fTH9vA-IHMQ59O9ZV0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W9LBBT9LBS39B0B9L66GAP79IEJCTDZEKBKbD0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W

当我在jwt.io网站上解码它时,我会得到标题:

{
  "alg": "RS256",
  "kid": "7b23576214e987f1757c1f1415e888a2",
  "typ": "JWT"
}
和有效载荷:

{
  "nbf": 1553256173,
  "exp": 1553259773,
  "iss": "http://localhost:5000",
  "aud": [
    "http://localhost:5000/resources",
    "bankOfDotNetApi"
  ],
  "client_id": "client",
  "scope": [
    "bankOfDotNetApi"
  ]
}
因为我使用了
RS256
算法进行签名,所以我需要向jwt.io添加公钥来验证令牌。但是我从哪里得到这个公钥呢? 如果我转到身份验证服务器的发现端点(例如),我将获得以下数据:

{
    keys: [
        {
            kty: "RSA",
            use: "sig",
            kid: "7b23576214e987f1757c1f1415e888a2",
            e: "AQAB",
            n: "509tIiUvmKkjjGOwzKElduRqpRND7YO-Op-IlsAeNwTlxY9_t22XfCqmxUyNvuvmdIVYXz-utl5bee3Tjwp8e7ok-Vn2uX-nI0jBcjTIKL0arbd7Qo5XgvICU4x-UcINrHtqMnY4S_R0uMKgaJkl3105bh9svQh--65tknjiKqmefT4M5SLHStWTisy2e0YwiaqvLam-O_rtbEawMy5-4avZep33y9Wz_JlgWyQ4jKD1Kn8mNGybjRoW3FJRkqzVNUSrGzjqwdDPL1cZOzM2HnbBqwVSFNnJiRYxPxKL_N8Q4CS9e2OVRjTof_EdzTTGC5mkOPhBCjpmvYS5d0j6JQ",
            alg: "RS256"
        }
    ]
}
但哪一个是公钥?我尝试将
n
e
kid
的值粘贴到“验证签名”部分的公钥文本字段下的jwt.io页面,但总是出现“无效签名”错误

那么,如何从discovery endpoint获取RS256令牌的公钥,以及如何使用它在jwt.io网站中手动验证令牌?

将整个(第一个也是唯一的)
密钥
对象值放在那里,包括花括号,至少包括以下内容:

{ 
     "kty":"RSA",  
     "kid":"7b23576214e987f1757c1f1415e888a2", 
     "e":"AQAB", 
     "n":"509tIiUvmKkjjGOwzKElduRqpRND7YO-Op-IlsAeNwTlxY9_t22XfCqmxUyNvuvmdIVYXz-utl5bee3Tjwp8e7ok-Vn2uX-nI0jBcjTIKL0arbd7Qo5XgvICU4x-UcINrHtqMnY4S_R0uMKgaJkl3105bh9svQh--65tknjiKqmefT4M5SLHStWTisy2e0YwiaqvLam-O_rtbEawMy5-4avZep33y9Wz_JlgWyQ4jKD1Kn8mNGybjRoW3FJRkqzVNUSrGzjqwdDPL1cZOzM2HnbBqwVSFNnJiRYxPxKL_N8Q4CS9e2OVRjTof_EdzTTGC5mkOPhBCjpmvYS5d0j6JQ"
}