I had to do the same thing in order to create a JWT for salesforce
integration and the caveat was that the pem file
was encoded, this worked for me, notice as stated above pem.Decode() is
needed.
package auth
import (
"crypto/x509"
"encoding/pem"
"fmt"
jwt "github.com/dgrijalva/jwt-go"
"io/ioutil"
"time"
)
func createToken() (token string, err error) {
claims := jwt.StandardClaims{
Issuer: "client_id",
Subject: "[email protected]",
Audience: "https://login.salesforce.com",
ExpiresAt: time.Now().Add(time.Minute * 3).Unix(),
}
at := jwt.NewWithClaims(jwt.SigningMethodRS256, claims)
crt, err := ioutil.ReadFile("test-crt/private_key.pem")
if err != nil {
panic(err)
}
block, _ := pem.Decode(crt)
if block == nil {
fmt.Println("No PEM blob found")
}
signKey, err := x509.ParsePKCS8PrivateKey(block.Bytes)
if err != nil {
panic(err)
}
token, err = at.SignedString(signKey)
if err != nil {
return
}
return
}
On Tuesday, April 21, 2020 at 11:08:22 AM UTC-5, James Mackerel wrote:
>
> Hi,
>
> Please take a look at <
> https://stackoverflow.com/questions/48958304/pkcs1-and-pkcs8-format-for-rsa-private-key
> >.
>
> If this is your code to parse your private key:
>
> f, err := os.Open(file)
>> if err != nil {
>> return nil, err
>> }
>> buf, err := ioutil.ReadAll(f)
>> if err != nil {
>> return nil, err
>> }
>> p, _ := pem.Decode(buf)
>> if p == nil {
>> return nil, errors.New("no pem block found")
>> }
>> return x509.ParsePKCS1PrivateKey(p.
>> Bytes)
>>
>
> I tried your commands. key.pem seems like a pkcs8 encoded key, and
> rsakey.pem seems like a pkcs1 key. That
> may be the reason why you got an error when you try to parse a pkcs8
> private key with ParsePKCS1PrivateKey.
>
> James
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/752d5e21-7d7d-4ce7-a85d-994ccd8b3d7e%40googlegroups.com.