JWT,以及与JWS和JWE之间的关系
简而言之,JWT是一种安全规范,主要用于在双方之间传递安全数据。而JWS和JWE是实现安全传输的两种方式,JWS用于对传输报文的签名与验签,JWE用于对敏感数据的加密解密。
JWS
官方文档直通车:JWS文档
JWS由三部分组成,header,payload和sign
header主要包含alg:标识用的什么算法加密。
crit:包括header里除了文档里规定字段之外的其他字段。
其他的字段,可视情况而定。
example
{
"alg": "RS256",
"kid": "201909031543",
"crit": ["UPI-UUID", "UPI-TIMESTAMP", "UPI-APPID", "UPI-REQPATH"],
"UPI-UUID": "07d2d-dfaa-412e-88e0-75d038b98237",
"UPI-TIMESTAMP": "1568263226",
"UPI-APPID": "M0050001",
"UPI-REQPATH": "/getInfo"
}
payload,这里可以放非加密数据的报文也可以放官方文档里要求的字段,我在实际应用中,是将报文经过Base64编码之后放在payload里,
sign,对(base64enc)header.(base64enc)payload进行签名,具体用的什么签名算法,根据header里的alg字段判断。
Q1:sign通过base64编码,因为官方文档,我见有写需要base64编码,不然验签报错:
java.security.SignatureException: Signature length not correct: got 344 but was expecting 256
这个问题解决参考博客。概述就是签名和验签的时候用的编码