这实际上分解为很多单独的问题来理解整个过程。
根据我的理解,JWT只是三个JSON对象,彼此分开编码到base64中。然后Base64字符串由句点分隔。这纯粹是为了“短信”的目的吗?
这些包括标题,“有效负载”和签名。任何截获它们的人都可以100%读取标题和有效负载。它们只是base64字符串,可以解码为JSON并读取。
然后MAGIC:服务器收到SIGNATURE,无法解码。签名实际上是标头,有效负载和秘密密钥的散列。因此服务器获取头,有效负载和ITS OWN密钥,并进行哈希。如果此哈希与消息附带的签名匹配,则该消息是可信的。如果签名不匹配,则消息无效。
我的所有这些问题?这里有两个独立的钥匙在哪里?似乎用于加密消息的密钥和用于解密消息的密钥是相同的。这是我的问题的根源 - 如果你没有回答,请帮助解决这个问题。
除此之外,我想知道我是否正确理解了这个过程?此外,标准“同意公钥”在哪里,然后交易公钥/私钥的“混合”?我所看到的只是用于编码/解码的相同密钥。但协议何时发生?在.NET和Auth0 btw的上下文中查看,但整体q。
我观看/阅读/使用的随机内容,如果有人有兴趣稍后看到这个问题:
JWT摘要:https://scotch.io/tutorials/the-anatomy-of-a-json-web-token
Public-key / Assymetric Cryptography:https://youtu.be/3QnD2c4Xovk
答案 0 :(得分:3)
首先,JSON对象签名和加密标准(JOSE)使用base64url编码而不是直接base64编码,略有不同。
JWT标头和有效负载是JSON对象,但签名不是,这是一个base64url编码的二进制blob
任何截获它的人都可以使用整个JWT,它的所有3个部分
您正在描述对称密钥算法,其中发送方和接收方使用相同的共享密钥;这只是JWTS的一个选项,另一种选择是使用公钥/私钥对进行签名/验证/加密/解密
与所有密码一样,密钥协议需要在带外协议。
答案 1 :(得分:3)
- 然后MAGIC:服务器收到SIGNATURE,无法解码。签名实际上是标头,有效负载和AND的散列 一把密钥。因此服务器获取标头,有效负载和ITS OWN 密钥,并制作哈希。如果这个哈希匹配签名那么 来自消息,消息是可信的。如果签名DO 不匹配,邮件无效。
醇>
这里没有魔力。 JWT支持四种众所周知的签名和MAC(消息认证码)结构:HMAC(对称算法),ECDSA,RSASSA-PKCS-v1.5和RSASSA-PSS(公钥算法) 。其中每个都可以与SHA-256,SHA-384或SHA-512加密摘要一起使用。另请参阅RFC 7518中的Cryptographic Algorithms for Digitial Signatures and MACs表 - JSON Web算法(JWA)。
我的所有这些问题?这里有两个独立的钥匙在哪里?它 似乎用于加密消息的密钥和用于的密钥 解密消息是一样的。这是我的问题的根源 - 如果 你没有别的回答,请帮忙。
不一定有两个单独的密钥 - 如果使用公钥算法,将使用服务器的私钥创建签名,并使用相应的公钥。但是,如果使用HMAC算法,则必须使用共享密钥密钥进行签名和验证。