我正在尝试使用 GitHub 应用程序,我需要生成一个 JWT 用于身份验证(https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#generating-a-private-key) 我正在尝试使用 Goland 来做到这一点。 我如何在 Go 中从 PEM 私钥生成 JWT??
最佳答案
jwt-go 库拥有您需要的所有工具,并且有很好的文档记录。您可以在 https://github.com/golang-jwt/jwt 找到它.
假设您了解 JWT 是什么以及它们的结构,并且您可以将 PEM key 作为 [] 字节获取,则过程大致如下:
- 将“github.com/golang-jwt/jwt/v4”添加到您的导入中。
- 创建一组声明,其中可以包括 RegisteredClaims 类型和您可能需要的任何自定义声明。
- 使用 jwt.NewWithClaims() 创建 token - 您需要提供适当的签名方法。我主要使用 RS256。
- 使用 token.SignedString() 从 token 创建 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
}
关于go - 在 Go 中从 GitHub App PEM 私钥生成 JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73399076/