golang-jwt/jwt
GitHub: golang-jwt/jwt
该项目是 RFC 7519 JSON Web Tokens 的 Go 语言实现,用于在应用程序中签发、解析和验证 JWT 令牌。
Stars: 9175 | Forks: 440
# jwt-go
[](https://github.com/golang-jwt/jwt/actions/workflows/build.yml)
[](https://pkg.go.dev/github.com/golang-jwt/jwt/v5)
[](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, 加密, 开发工具, 日志审计, 漏洞扫描器