我无法清楚地了解JWT工作原理,尤其是。签名部分。
客户端提交正确的用户名和密码后,身份验证服务器将创建JWT由标头,有效负载/声明和签名组成的令牌。
问题1-签名是否是只有身份验证服务器才知道的某些秘密密钥(不是用户的密码)(服务器的某种私钥)?
问题2-假设我使用的是单独的应用程序服务器和身份验证服务器,JWT从客户端收到消息 后,应用程序服务器会发送JWT给身份验证服务器以使其经过验证吗?我想应用程序服务器无法验证JWT令牌,因为它不知道用于签署标头和有效负载的密钥。
问题3-我接受了以下内容JWT并将其粘贴jwt.io。我看到消息了Signature Verified。jwt.io如何知道签名是正确的,因为它不知道密钥。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxLS9tSjVsVTNYc09QWCt2VitpaGZRMWlCUDVjUTROQm1hNDluOE9rS1FFSnEzTDFNOTl2VW9iQ1ZLUHVYMmdlWWhYaHJQM0t3bHY4SE1RaHNGdnFjbllIeGxGSHM9IiwiaXNzIjoicGxheS1zaWxob3VldHRlIiwiZXhwIjoxNTI2MjgxMDU1LCJpYXQiOjE1MjYyMzc4NTUsImp0aSI6IjhmOGM3YTVmYWRkNTE5MjUxNzQ5NGE4N2Q1ODcxZjJjZGUxZDkzMDdkOTY1MThjNjg2NzExOTc1YjU3M2I5NDBlZWU2NGY0NDUwYzcxODI3NGZmNzU1MmE2Y2JlNTVmZmZhMWI1ZjA3ZWZlOWVkNTE0Y2Y4YTViOTZlM2ExYjI0ODRmYTI5NjZiYjA0ODlmODIwZjMyMzM5YWVhNjM3NWRkZmU4ZDE4N2E2NzBjMzg0ODgwZGIyMzQ1ZTFkMzRkYWNjZmY2MTdkMDY1NzU3YmEwZTQzNDg4YWFhZmZmNDNjYWZlZGY0OTFlODU1YTA0NWM0NmJjNDY4NGYzODlmY2YifQ.GwN6TSNd426xpc3Y02eRXHbrmSr_61MMBqrmx66Ofqs
问题 1 - 签名是否是一些只有认证服务器知道的密钥(不是用户的密码)(某种服务器的私钥)?
不,电子签名是使用密钥应用于 JWT 负载的数学计算。目的是确保消息未被更改并识别签名者以验证 JWT
问题 2 - 假设我使用单独的应用程序服务器和身份验证服务器,在从客户端接收 JWT 时,应用程序服务器是否会将 JWT 发送到身份验证服务器以对其进行验证?我想应用程序服务器无法验证 JWT 令牌,因为它不知道用于签署标头和有效负载的密钥。
不必要。如果使用对称密钥 (HMAC),则签名和验证密钥是相同的。在这种情况下,授权服务器必须知道密钥或发送令牌进行验证。但是,如果使用非对称密钥(RSA、ECDSA),则签名密钥与验证密钥不同。授权服务器可以安全地拥有公钥的副本
问题 3 - 我将以下 JWT 粘贴到 jwt.io 上。我看到消息签名验证。jwt.io 如何知道签名是正确的,因为它不知道密钥。
jwt.io 或任何想要验证令牌的人都需要密钥。请注意,如果您在 jwt.io 中复制并粘贴令牌,则不会验证签名,但是如果您更改密钥,则编辑器会自动更改签名时创建新令牌
| 归档时间: |
|
| 查看次数: |
10712 次 |
| 最近记录: |