jwt

package
v6.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 5, 2024 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package jwt JSON Web Tokens 验证

sign := NewSigner(...)
v := NewVerifier[*jwt.RegisterClaims](nil, builder)

// 添加多种编码方式
sign.Add("hmac", jwt.SigningMethodHS256, []byte("secret"))
v.Add("hmac", jwt.SigningMethodHS256, []byte("secret"))
sign.AddRSA("rsa", jwt.SigningMethodRS256, []byte("private"))
v.AddRSA("rsa", jwt.SigningMethodRS256, []byte("public"))

sign.Sign(&jwt.RegisterClaims{...})
sign.Sign(&jwt.RegisterClaims{...})

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ErrSigningMethodNotFound

func ErrSigningMethodNotFound() error

func GetToken

func GetToken(ctx *web.Context) string

GetToken 获取客户端提交的 token

Types

type Blocker

type Blocker[T Claims] interface {
	// TokenIsBlocked 令牌是否已被提早丢弃
	TokenIsBlocked(string) bool

	// ClaimsIsBlocked 根据 Claims 判断是否已经丢弃
	//
	// 这是对令牌解码之后的阻断行为,性能上有解码的开销,便是相对来说也更加的灵活,
	// 比如要禁用某一用户所有签发的令牌,或是为某一设备签发的令牌等,
	// 只要 T 类型中带的字段均可作为判断依据。
	ClaimsIsBlocked(T) bool
}

Blocker 判断令牌是否被丢弃

在某些情况下,需要强制用户的令牌不再可用,可以使用此接口。

type BuildClaimsFunc

type BuildClaimsFunc[T Claims] func() T

type BuildResponseFunc

type BuildResponseFunc = func(access, refresh string, expires int) any

BuildResponseFunc 根据给定的参数返回给定客户端的对象

access 是必须的,表示请求数据的 token; refresh 表示刷新的 token,如果为空,不会输出; expires 表示 access 的过期时间;

type Claims

type Claims interface {
	jwt.Claims

	// BuildRefresh 根据令牌生成刷新令牌用的 Claims
	BuildRefresh(string) Claims

	// SetExpired 设置当前令牌的过期时间
	SetExpired(time.Duration)
}

Claims JWT Claims 对象需要实现的接口

type JWT

type JWT[T Claims] struct {
	// contains filtered or unexported fields
}

JWT JWT 管理

同时包含了 VerifierSigner,大部分时候这是比直接使用 VerifierSigner 更方便的方法。

func New

func New[T Claims](b Blocker[T], f BuildClaimsFunc[T], expired, refresh time.Duration, br BuildResponseFunc) *JWT[T]

func (*JWT[T]) Add

func (j *JWT[T]) Add(id string, sign SigningMethod, pub, pvt []byte)

Add 添加签名方法

NOTE: 如果添加的是 HMAC 类型的函数,那么 pvt 和 pub 两者需要相同。

func (*JWT[T]) AddECDSA

func (j *JWT[T]) AddECDSA(id string, sign *jwt.SigningMethodECDSA, pub, pvt []byte)

func (*JWT[T]) AddECDSAFromFS

func (j *JWT[T]) AddECDSAFromFS(id string, sign *jwt.SigningMethodECDSA, fsys fs.FS, pub, pvt string)

func (*JWT[T]) AddEd25519

func (j *JWT[T]) AddEd25519(id string, sign *jwt.SigningMethodEd25519, pub, pvt []byte)

func (*JWT[T]) AddEd25519FromFS

func (j *JWT[T]) AddEd25519FromFS(id string, sign *jwt.SigningMethodEd25519, fsys fs.FS, pub, pvt string)

func (*JWT[T]) AddFromFS

func (j *JWT[T]) AddFromFS(id string, sign SigningMethod, fsys fs.FS, pub, pvt string)

AddFromFS 添加签名方法密钥从文件中加载

NOTE: 此方法不支持 HMAC 类型。

func (*JWT[T]) AddHMAC

func (j *JWT[T]) AddHMAC(id string, sign *jwt.SigningMethodHMAC, secret []byte)

AddHMAC 添加 HMAC 算法

NOTE: 调用者需要保证每次重启之后,id 值不能改变,否则所有的登录信息 token 将失效。

func (*JWT[T]) AddRSA

func (j *JWT[T]) AddRSA(id string, sign *jwt.SigningMethodRSA, pub, pvt []byte)

func (*JWT[T]) AddRSAFromFS

func (j *JWT[T]) AddRSAFromFS(id string, sign *jwt.SigningMethodRSA, fsys fs.FS, pub, pvt string)

func (*JWT[T]) AddRSAPSS

func (j *JWT[T]) AddRSAPSS(id string, sign *jwt.SigningMethodRSAPSS, pub, pvt []byte)

func (*JWT[T]) AddRSAPSSFromFS

func (j *JWT[T]) AddRSAPSSFromFS(id string, sign *jwt.SigningMethodRSAPSS, fsys fs.FS, pub, pvt string)

func (*JWT[T]) GetValue

func (j *JWT[T]) GetValue(ctx *web.Context) (T, bool)

GetValue 返回解码后的 Claims 对象

func (*JWT[T]) Middleware

func (j *JWT[T]) Middleware(next web.HandlerFunc) web.HandlerFunc

Middleware 解码用户的 token 并写入 *web.Context

func (*JWT[T]) Render

func (j *JWT[T]) Render(ctx *web.Context, status int, accessClaims Claims) web.Responser

Render 向客户端输出令牌

当前方法会将 accessClaims 进行签名,并返回 web.Responser 对象。

func (*JWT[T]) Sign

func (j *JWT[T]) Sign(claims Claims) (string, error)

Sign 对 claims 进行签名

算法从添加的库里随机选取。

type Response

type Response struct {
	XMLName struct{} `json:"-" xml:"token"`
	Access  string   `json:"access_token" xml:"access_token"`
	Refresh string   `json:"refresh_token,omitempty" xml:"refresh_token,omitempty"`
	Expires int      `json:"expires,omitempty" xml:"expires,attr,omitempty"`
}

type Signer

type Signer struct {
	// contains filtered or unexported fields
}

Signer 证书的签发管理

仅负责对令牌的签发,如果需要验证令牌,则需要 Verifier 对象, 同时需要保证 Verifier 添加的证书数量和 ID 与当前对象是相同的。

func NewSigner

func NewSigner(expired, refresh time.Duration, br BuildResponseFunc) *Signer

NewSigner 声明签名对象

expired 普通令牌的过期时间; refresh 刷新令牌的时间,非零表示有刷新令牌,如果为非零值,则必须大于 expired; br 表示将令牌组合成一个对象用以返回给客户端,可以为空,采用返回 Response 作为其默认实现;

func (*Signer) Add

func (s *Signer) Add(id string, sign SigningMethod, private []byte)

Add 添加签名方法

func (*Signer) AddECDSA

func (s *Signer) AddECDSA(id string, sign *jwt.SigningMethodECDSA, private []byte)

func (*Signer) AddECDSAFromFS

func (s *Signer) AddECDSAFromFS(id string, sign *jwt.SigningMethodECDSA, fsys fs.FS, private string)

func (*Signer) AddEd25519

func (s *Signer) AddEd25519(id string, sign *jwt.SigningMethodEd25519, private []byte)

func (*Signer) AddEd25519FromFS

func (s *Signer) AddEd25519FromFS(id string, sign *jwt.SigningMethodEd25519, fsys fs.FS, private string)

func (*Signer) AddFromFS

func (s *Signer) AddFromFS(id string, sign SigningMethod, fsys fs.FS, private string)

AddFromFS 添加签名方法密钥从文件中加载

func (*Signer) AddHMAC

func (s *Signer) AddHMAC(id string, sign *jwt.SigningMethodHMAC, secret []byte)

func (*Signer) AddRSA

func (s *Signer) AddRSA(id string, sign *jwt.SigningMethodRSA, private []byte)

func (*Signer) AddRSAFromFS

func (s *Signer) AddRSAFromFS(id string, sign *jwt.SigningMethodRSA, fsys fs.FS, private string)

func (*Signer) AddRSAPSS

func (s *Signer) AddRSAPSS(id string, sign *jwt.SigningMethodRSAPSS, private []byte)

func (*Signer) AddRSAPSSFromFS

func (s *Signer) AddRSAPSSFromFS(id string, sign *jwt.SigningMethodRSAPSS, fsys fs.FS, private string)

func (*Signer) Render

func (s *Signer) Render(ctx *web.Context, status int, accessClaims Claims) web.Responser

Render 向客户端输出令牌

当前方法会将 accessClaims 进行签名,并返回 web.Responser 对象。

func (*Signer) Sign

func (s *Signer) Sign(claims Claims) (string, error)

Sign 对 claims 进行签名

算法随机从 [Signer.AddKey] 添加的库里选取。

type SigningMethod

type SigningMethod = jwt.SigningMethod

type Verifier

type Verifier[T Claims] struct {
	// contains filtered or unexported fields
}

Verifier JWT 验证器

仅负责对令牌的验证,如果需要签发令牌,则需要 Signer 对象, 同时需要保证 Signer 添加的证书数量和 ID 与当前对象是相同的。

func NewVerifier

func NewVerifier[T Claims](b Blocker[T], f BuildClaimsFunc[T]) *Verifier[T]

NewVerifier 声明 Verifier 对象

b 为处理丢弃令牌的对象,如果为空表示不会对任何令牌作特殊处理; f 为 Claims 对象的生成方法;

func (*Verifier[T]) Add

func (j *Verifier[T]) Add(id string, sign SigningMethod, public []byte)

Add 添加签名方法

func (*Verifier[T]) AddECDSA

func (j *Verifier[T]) AddECDSA(id string, sign *jwt.SigningMethodECDSA, public []byte)

func (*Verifier[T]) AddECDSAFromFS

func (j *Verifier[T]) AddECDSAFromFS(id string, sign *jwt.SigningMethodECDSA, fsys fs.FS, public string)

func (*Verifier[T]) AddEd25519

func (j *Verifier[T]) AddEd25519(id string, sign *jwt.SigningMethodEd25519, public []byte)

func (*Verifier[T]) AddEd25519FromFS

func (j *Verifier[T]) AddEd25519FromFS(id string, sign *jwt.SigningMethodEd25519, fsys fs.FS, public string)

func (*Verifier[T]) AddFromFS

func (j *Verifier[T]) AddFromFS(id string, sign SigningMethod, fsys fs.FS, public string)

AddFromFS 添加签名方法密钥从文件中加载

func (*Verifier[T]) AddHMAC

func (j *Verifier[T]) AddHMAC(id string, sign *jwt.SigningMethodHMAC, secret []byte)

func (*Verifier[T]) AddRSA

func (j *Verifier[T]) AddRSA(id string, sign *jwt.SigningMethodRSA, public []byte)

func (*Verifier[T]) AddRSAFromFS

func (j *Verifier[T]) AddRSAFromFS(id string, sign *jwt.SigningMethodRSA, fsys fs.FS, public string)

func (*Verifier[T]) AddRSAPSS

func (j *Verifier[T]) AddRSAPSS(id string, sign *jwt.SigningMethodRSAPSS, public []byte)

func (*Verifier[T]) AddRSAPSSFromFS

func (j *Verifier[T]) AddRSAPSSFromFS(id string, sign *jwt.SigningMethodRSAPSS, fsys fs.FS, public string)

func (*Verifier[T]) GetValue

func (j *Verifier[T]) GetValue(ctx *web.Context) (T, bool)

GetValue 返回解码后的 Claims 对象

func (*Verifier[T]) Middleware

func (j *Verifier[T]) Middleware(next web.HandlerFunc) web.HandlerFunc

Middleware 解码用户的 token 并写入 *web.Context

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL