Как сгенерировать pem из jwk в го - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь сгенерировать строку pem с помощью этой библиотеки:

"github.com/lestrrat-go/jwx/jwk"

Но пока я не могу, яЯ предполагаю, что это потому, что я новичок, и есть кое-что, чего я не понимаю.Я прочитал документ, найденный здесь: документ

Мой код извлекает 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, но мой путьприложение это клиент.)

Любая помощь будет оценена

1 Ответ

0 голосов
/ 14 июня 2019

Сервер авторизации обычно предоставляет конечную точку для получения 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
}
...
...