go - 在 Go 中从 GitHub App PEM 私钥生成 JWT

标签 go

我正在尝试使用 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 作为 [] 字节获取,则过程大致如下:

  1. 将“github.com/golang-jwt/jwt/v4”添加到您的导入中。
  2. 创建一组声明,其中可以包括 RegisteredClaims 类型和您可能需要的任何自定义声明。
  3. 使用 jwt.NewWithClaims() 创建 token - 您需要提供适当的签名方法。我主要使用 RS256。
  4. 使用 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/

相关文章:

database - 我应该在哪里存储全局数据库实例?

postgresql - 无法将 json 范围读取为 pgtype.Int4range

json - 无法处理 golang 结构中的 json 字符串数据

sql - Golang sql 包查询比 PostgreSQL SQL 查询慢

go - HTTP批量从多个API获取并保存到结构

c++ - Go context.Background() 的 gRPC++ 等价物是什么?

oop - 将继承的结构作为基础对象传回

go - 我怎么知道我的所有 goroutine 确实正在使用 golang 的同步包等待一个条件

xml - 节点 N 的 Go XML Unmarshalling 属性 X

go - 从另一个包引用结构域