golang-jwt/jwt

GitHub: golang-jwt/jwt

该项目是 RFC 7519 JSON Web Tokens 的 Go 语言实现,用于在应用程序中签发、解析和验证 JWT 令牌。

Stars: 9175 | Forks: 440

# jwt-go [![构建](https://static.pigsec.cn/wp-content/uploads/repos/cas/05/052bc9eaea1744e860f382f618f1146be38e27dfd499bb29c253bcd1827fad60.svg)](https://github.com/golang-jwt/jwt/actions/workflows/build.yml) [![Go 参考文档](https://pkg.go.dev/badge/github.com/golang-jwt/jwt/v5.svg)](https://pkg.go.dev/github.com/golang-jwt/jwt/v5) [![覆盖率状态](https://coveralls.io/repos/github/golang-jwt/jwt/badge.svg?branch=main)](https://coveralls.io/github/golang-jwt/jwt?branch=main) 一个基于 [go](http://www.golang.org)(为了对搜索引擎友好而称作 'golang')的 [JSON Web Tokens](https://datatracker.ietf.org/doc/html/rfc7519) 实现。 从 [v4.0.0](https://github.com/golang-jwt/jwt/releases/tag/v4.0.0) 版本开始, 本项目添加了 Go module 支持,但保持了对旧版 `v3.x.y` 标签和上游 `github.com/dgrijalva/jwt-go` 的向后兼容性。请参阅 [`MIGRATION_GUIDE.md`](./MIGRATION_GUIDE.md) 获取更多信息。v5.0.0 版本 对 token 的验证引入了重大改进,但并非完全向后兼容。 **安全须知:** 某些旧版本的 Go 在 crypto/elliptic 中存在安全问题。建议至少升级到 1.15 版本。详情请参阅 issue [dgrijalva/jwt-go#216](https://github.com/dgrijalva/jwt-go/issues/216)。 **安全须知:** 重要的是,您必须[验证所提供的 `alg` 是否符合您的预期](https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/)。 本库试图通过要求 key 类型与预期的 alg 匹配,来让您轻松做正确的事,但在您的实际使用中,您应该采取额外的步骤来验证它。请参阅提供的示例。 ### 支持的 Go 版本 ## 到底什么是 JWT? JWT.io 对 JSON Web Tokens 有一篇[很棒的介绍](https://jwt.io/introduction)。 简而言之,它是一个已签名的 JSON 对象,可用于执行某些有用的操作(例如 身份验证)。它通常用于 Oauth 2 中的 `Bearer` token。一个 token 由三部分组成,以 `.` 分隔。前两部分是经过 [base64url](https://datatracker.ietf.org/doc/html/rfc4648) 编码的 JSON 对象。最后一部分是签名,以相同的方式编码。 第一部分称为 header。它包含了用于 验证最后一部分(即签名)的必要信息。例如,签名时使用了哪种 加密方法以及使用了哪个 key。 中间的部分是关键所在。它被称为 Claims, 包含了您真正关心的实际内容。有关 保留键以及添加自定义键的正确方法的信息,请参阅 [RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519)。 ## 里面有什么? 本库支持 JWT 的解析和验证,以及生成和 签名。目前支持的签名算法有 HMAC SHA、RSA、 RSA-PSS 和 ECDSA,同时也提供了用于添加自定义算法的 hook。 ## 安装指南 1. 要安装 jwt 包,您首先需要安装 [Go](https://go.dev/doc/install),然后您可以使用 以下命令将 `jwt-go` 作为依赖项添加到您的 Go 程序中。 ``` go get -u github.com/golang-jwt/jwt/v5 ``` 2. 在您的代码中导入它: ``` import "github.com/golang-jwt/jwt/v5" ``` ## 用法 详细的用法指南(包括如何签名和验证 token)可以在 我们的[文档网站](https://golang-jwt.github.io/jwt/usage/create/)上找到。 ## 示例 请参阅[项目文档](https://pkg.go.dev/github.com/golang-jwt/jwt/v5) 获取使用示例: * [解析和验证 token 的简单示例](https://pkg.go.dev/github.com/golang-jwt/jwt/v5#example-Parse-Hmac) * [构建和签名 token 的简单示例](https://pkg.go.dev/github.com/golang-jwt/jwt/v5#example-NewWithClaims-Hmac) * [示例目录](https://pkg.go.dev/github.com/golang-jwt/jwt/v5#pkg-examples) ## 合规性 本库最近一次审查符合 [RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519)(2015 年 5 月),但有一些 显著的区别: * 为了防止意外使用 [Unsecured JWTs](https://datatracker.ietf.org/doc/html/rfc7519#section-6),只有当常量 `jwt.UnsafeAllowNoneSignatureType` 作为 key 提供时,使用 `alg=none` 的 token 才会被接受。 ## 项目状态与版本控制 本库被认为已达到生产就绪状态。我们非常感谢您的反馈和 功能请求。该 API 应被视为稳定的。除了主要版本更新外(且必须有 充分的理由),应该极少出现向后不兼容的变更。 本项目使用 [语义化版本 2.0.0](http://semver.org)。已接受的 pull request 将合并到 `main`。版本会定期从 `main` 打标签。您可以在[项目发布 页面](https://github.com/golang-jwt/jwt/releases)找到所有的发布版本。 **重大变更:** 完整的重大变更列表可在 `VERSION_HISTORY.md` 中找到。有关更新代码的更多信息,请参阅 [`MIGRATION_GUIDE.md`](./MIGRATION_GUIDE.md)。 ## 扩展 本库发布了所有必要的组件,以便添加您自己的签名 方法或 key 函数。只需实现 `SigningMethod` 接口并 使用 `RegisterSigningMethod` 注册一个工厂方法,或者提供一个 `jwt.Keyfunc`。 一个常见的用例是与不同的 3rd party 签名提供商集成, 例如各种云提供商的 key 管理服务或硬件安全模块,或者是实现额外的标准。 | 扩展 | 用途 | 仓库 | | --------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | | GCP | 集成了多个 Google Cloud Platform 签名工具 (AppEngine, IAM API, Cloud KMS) | https://github.com/someone1/gcp-jwt-go | | AWS | 集成了 AWS Key Management Service, KMS | https://github.com/matelang/jwt-go-aws-kms | | JWKS | 为 JWKS ([RFC 7517](https://datatracker.ietf.org/doc/html/rfc7517)) 提供作为 `jwt.Keyfunc` 的支持 | https://github.com/MicahParks/keyfunc | | TPM | 集成了 Trusted Platform Module (TPM) | https://github.com/salrashid123/golang-jwt-tpm | *免责声明*:除非另有说明,否则这些集成均由 第三方维护,不应被视为任何上述云提供商提供的主要产品 ## 更多 Go 包文档可以在 [pkg.go.dev](https://pkg.go.dev/github.com/golang-jwt/jwt/v5) 上找到。额外的文档可以在 [我们的项目页面](https://golang-jwt.github.io/jwt/)上找到。 本项目中包含的命令行实用程序 提供了一个 直观的 token 创建和解析示例,同时也是调试您自己的 集成的有用工具。您还可以在文档中找到 几个实现示例。 [golang-jwt](https://github.com/orgs/golang-jwt) 包含了修改版的 JWT logo,该 logo 是在 [MIT License](https://github.com/jsonwebtoken/jsonwebtoken.github.io/blob/master/LICENSE.txt) 条款下分发的。
标签:EVTX分析, Go, JWT, Ruby工具, SOC Prime, 加密, 开发工具, 日志审计, 漏洞扫描器