为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用x5c解析一组JWK并验证JWT?

如何使用x5c解析一组JWK并验证JWT?

Go
Helenr 2022-08-24 10:20:30
我想验证 JSON Web 令牌。用于验证的 JSON Web 密钥可在此 URL 下使用。这些是具有 x509 证书 (x5c) 的 JWK。根据另一个问题的答案,尝试了以下操作:import  "github.com/dgrijalva/jwt-go"import  "github.com/lestrrat-go/jwx/jwk"func verifyToken(tokenBytes []byte) {    token, err := jwt.Parse(string(tokenBytes), getKey)    if err != nil {        panic(err)    }}func getKey(token *jwt.Token) (interface{}, error) {    set, err := jwk.Fetch(context.Background(), "https://shareduks.uks.attest.azure.net/certs")    if err != nil {        return nil, err    }    keyID, ok := token.Header["kid"].(string)    if !ok {        return nil, err    }    key, ok := set.LookupKeyID(keyID)    if !ok {        return nil, errors.New("could not find key with kid")    }    return key, nil}但是我收到以下错误panic: failed to parse JWK set: failed to unmarshal JWK set: failed to unmarshal key #1 (total 5) from multi-key JWK set: failed to unmarshal JSON into key (*jwk.rsaPublicKey): required field e is missing我找不到使用x5c的示例。解决方案不必使用我在示例中使用的库。谢谢!
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

该错误 () 的原因是此 URL 中的 JWK 集无效。即使 JWK 包含它,它仍然必须包含该特定所需的其他公钥成员,对于该 URL 中列出的 RSA 密钥,这意味着具有 和 。required field e is missingx5cktyne



查看完整回答
反对 回复 2022-08-24
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

作者 http://github.com/lestrrat-go/jwx 在这里.


我还没有合并解析证书的能力,但等待问题报告器的响应,但代码已经写 https://github.com/lestrrat-go/jwx/compare/topic/issue-350


一旦该更改进入,就可以执行一些手臂扭曲并解析这些证书(伪代码):


data := ... read from that URL ...


rawSet := make(map[string]interface{})

if err := json.Unmarshal(data, &rawSet); err != nil {

   ...

}


// yikes

keys := rawset["keys"].([]interface{})

firstKey := keys[0].(map[string]interface{})

x5c := (firstKey["x5c"].([]interface{}))[0].(string)


// Decode from base64 

cert, _ := base64.RawStdEncoding.DecodeString(x5c)


// turn the certificate into JWK (NOT YET MERGED)

key, _ := jwk.ParseKey(cert, jwk.WithPEM(true))

如果您需要将证书解析为 JWK 的功能,请在存储库中提交新问题,以便我跟踪更改。


此外,如果要导入 http://github.com/lestrrat-go/jwx/jwk,则不妨对 JWT 使用 http://github.com/lestrrat-go/jwx/jwt;)


查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 248 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信