【问题标题】:How to generate pem from jwk in go如何在go中从jwk生成pem
【发布时间】:2019-08-30 08:32:47
【问题描述】:

我正在尝试使用这个库生成一个 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,但我去app 它是一个客户端。)

任何帮助将不胜感激

【问题讨论】:

标签: go pem jwk


【解决方案1】:

go 中的即用型解决方案:

Jumpy-Squirrel/jwks2pem

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

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
【解决方案2】:

授权服务器通常提供一个端点来获取 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
}
...

【讨论】:

    猜你喜欢
    • 2022-10-06
    • 2019-07-18
    • 2019-10-21
    • 1970-01-01
    • 2019-12-04
    • 2021-04-07
    • 2017-05-06
    • 2022-01-24
    • 2021-12-19
    相关资源
    最近更新 更多