在Go语言中从GitHub应用PEM私钥生成JWT

xfb7svmp  于 2023-01-22  发布在  Go
关注(0)|答案(2)|浏览(196)

我正在尝试使用GitHub应用程序,我需要生成一个JWT来进行身份验证(https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#generating-a-private-key)我正在尝试使用高兰德来实现这一点。我如何在Go语言中从PEM私钥生成一个JWT?

lp0sw83n

lp0sw83n1#

jwt-go库包含了你需要的所有工具,并且有很好的文档,你可以在https://github.com/golang-jwt/jwt找到它。
假设您了解JWT是什么以及它们是如何构造的,并且您可以将PEM键作为[]byte来获取,则过程大致如下:
1.将“github.com/golang-jwt/jwt/v4“添加到导入中。
1.创建一组声明,其中可以包括RegisteredClaims类型和您可能需要的任何自定义声明。
1.使用jwt.NewWithClaims()创建令牌--您需要提供适当的签名方法。
1.使用token.SignedString()从标记创建JWT字符串。
实际上,它看起来像这样:

imports "github.com/golang-jwt/jwt/v4"

type MyCustomClaims struct {
    *jwt.RegisteredClaims
    FooClaim int
    BarClaim string
}

func CreateJWT(pemKey []byte) string {
    // expires in 60 minutes
    expiration := time.Now().Add(time.Second * 3600)

    claims := MyCustomClaims{
        RegisteredClaims: &jwt.RegisteredClaims{
            Issuer:    "Example Code Inc.",
            ExpiresAt: jwt.NewNumericDate(expiration),
            Subject:   "JWT Creation",
        },
        FooClaim: 123,
        BarClaim: "bar",
    }

    token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims)

    privateKey, _ := jwt.ParseRSAPrivateKeyFromPEM(pemKey)

    myJWT, _ := jwt.SignedString(privateKey)

    return myJWT
}
drkbr07n

drkbr07n2#

我建议从这个存储库中阅读代码:
https://github.com/bradleyfalzon/ghinstallation
我不知道为什么,但是上面来自@JesseB的答案中的代码对我不起作用--它总是抛出:401未经授权。尽管此存储库确实在内部使用golang-jwt

相关问题