0

我正在尝试使用这个库生成一个 pem 字符串:

“github.com/lestrrat-go/jwx/jwk”

但到目前为止我还没有,我猜这是因为我是新手,有些东西我不明白。我已阅读此处找到的文档:doc

我的代码从服务器获取 JWK,一旦我拥有它,我会尝试在此处生成一个 pem 字符串:

// validationCrt contains my []byte from the server
set, err := jwk.Parse(validationCrt)
if err != nil {
    println(err)
}

// I suspect this piece of code is actually a mess
// but I just can't understand what I'm doing wrong
key, err := jwk.GetPublicKey(set)
if err != nil {
    log.Printf("failed to create public key: %s", err)
}

我真的迷路了,我尝试了多种方法(有和没有这个库),似乎我找不到任何例子(他们通常解释如何生成密钥,或从 pem 到 jwt,但我的 go 应用程序是客户。)

任何帮助,将不胜感激

4

2 回答 2

1

授权服务器通常提供一个端点来获取 JSON Web Keyset (JWKS)。所以我认为validationCrt确实是一个 JSON Web Keyset。不过,您可以json.Unmarshal()通过 JWK/JWKS ( square/go-jose ) 获取公钥的引用.Key

获取 PEM 格式就像

...
pubData, err := x509.MarshalPKIXPublicKey(pubKey)
if err != nil {
    return err
}
if err := pem.Encode(os.Stdout, &pem.Block{
    Type:  "PUBLIC KEY",
    Bytes: pubData,
}); err != nil {
    return err
}
...
于 2019-06-14T15:00:08.117 回答
0

准备运行的解决方案:

跳跃松鼠/jwks2pem

这建立在@trung 的答案之上,但使用了另一个库lestrrat-go/jwx

于 2022-02-05T14:43:26.597 回答