如何验证JWKS的完整性与真实性?是否有规范方案?
符合规范的解决方案:用JWS非紧凑格式签名JWKS
直接采用JWS(JSON Web Signature)的非紧凑序列化格式包裹你的JWKS,这是完全符合RFC7515标准的方案,完美匹配你的需求:
- 兼容现有读取工具:JWS非紧凑格式是JSON结构,其中
payload字段是base64url编码的原始JWKS内容。现有JWKS解析工具无需特殊处理,直接解码payload就能拿到完整的keys集合,完全不影响正常读取流程。 - 支持可选签名验证:验证方可以自行决定是否校验签名:如果信任传输通道,直接使用payload内的JWKS即可;如果需要防范中间人篡改,就用对应的PKI证书验证JWS的签名,确认JWKS未被篡改。
- 高生态兼容性:JWS是业内广泛支持的标准,几乎所有JWK/JWT相关工具库都能处理JWS格式,比你提到的JSF方案兼容性强得多。
举个简单的结构示例:
{ "protected": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjE2MjA5MzQwLTEyMzQtNDU2Ny04Nzg5LWFiY2RlZjEyMzQ1NiJ9", "payload": "eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJjcnYiOiJQLTI1NiIsImtpZCI6IjE2MjA5MzQwLTEyMzQtNDU2Ny04Nzg5LWFiY2RlZjEyMzQ1NiIsInVybCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vYXV0aC9rZXlzLzE2MjA5MzQwLTEyMzQtNDU2Ny04Nzg5LWFiY2RlZjEyMzQ1NiJ9XX0", "signature": "cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0SFuH7mgL4x1FDPkDm7H9z4IgqWizBhFkHRqku4K1HmLCRLt4c0M4k0J8V5h3uO0GkHx4V1rN4U4lU0l4e0a0e1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7" }
解码payload后就能得到原始的JWKS结构:
{ "keys": [ { "kty": "RSA", "crv": "P-256", "kid": "16209340-1234-4567-8789-abcdef123456", "url": "https://example.com/auth/keys/16209340-1234-4567-8789-abcdef123456" } ] }
你提到的自行在keys旁添加自定义签名字段的做法也能实现功能,但不属于标准规范,工具兼容性会差很多,远不如JWS方案稳妥。
内容的提问来源于stack exchange,提问作者Koos Gadellaa
相关产品推荐
相关产品推荐

