我正在尝试使用GitHub应用程序,我需要生成一个JWT来进行身份验证(https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#generating-a-private-key)我正在尝试使用高兰德来实现这一点。我如何在Go语言中从PEM私钥生成一个JWT?
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 }
drkbr07n2#
我建议从这个存储库中阅读代码:https://github.com/bradleyfalzon/ghinstallation我不知道为什么,但是上面来自@JesseB的答案中的代码对我不起作用--它总是抛出:401未经授权。尽管此存储库确实在内部使用golang-jwt包
golang-jwt
2条答案
按热度按时间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字符串。
实际上,它看起来像这样:
drkbr07n2#
我建议从这个存储库中阅读代码:
https://github.com/bradleyfalzon/ghinstallation
我不知道为什么,但是上面来自@JesseB的答案中的代码对我不起作用--它总是抛出:401未经授权。尽管此存储库确实在内部使用
golang-jwt
包