jwt

package
v7.0.0-...-1a455bf Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2024 License: MIT Imports: 11 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

Types

type Blocker

type Blocker[T Claims] interface {
	// BlockToken 拉黑令牌
	//
	// token 令牌;
	// refresh 是否为刷新令牌;
	BlockToken(token string, refresh bool) error

	// TokenIsBlocked 令牌是否已被丢弃
	TokenIsBlocked(string) bool

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

Blocker 判断令牌是否被丢弃

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

func NewCacheBlocker

func NewCacheBlocker[T Claims](c web.Cache, access, refresh time.Duration) Blocker[T]

NewCacheBlocker 声明基于 web.CacheBlocker 实现

access 和 refresh 表示拉黑的令牌在多少时间之后会被释放;

type BuildClaimsFunc

type BuildClaimsFunc[T Claims] func() T

type Claims

type Claims interface {
	jwt.Claims

	// BuildRefresh 根据令牌 token 生成刷新令牌的 [Claims]
	//
	// token 生成的刷新令牌与此令牌相关联,此值可通过返回对象的 [Claims.BaseToken] 返回;
	// ctx 生成此刷新令牌的请求环境;
	BuildRefresh(token string, ctx *web.Context) Claims

	// BaseToken 刷新令牌关联的令牌
	//
	// 如果是非刷新令牌的话,此方法应该返回空字符串。
	// 否则应该返回调用 [Claims.BuildRefresh] 的参数。
	BaseToken() string
}

Claims 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 token.BuildResponseFunc) *JWT[T]

New 声明 JWT 对象

参数可参考 NewVerifierNewSigner

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]) GetInfo

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

func (*JWT[T]) Logout

func (j *JWT[T]) Logout(ctx *web.Context) error

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 Signer

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

Signer 证书的签发管理

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

func NewSigner

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

NewSigner 声明签名对象

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

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 对象。

status 返回给客户端的状态码;

func (*Signer) Sign

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

Sign 对 claims 进行签名

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

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]) GetInfo

func (j *Verifier[T]) GetInfo(ctx *web.Context) (claims T, found bool)

func (*Verifier[T]) Logout

func (j *Verifier[T]) Logout(ctx *web.Context) error

func (*Verifier[T]) Middleware

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

Middleware 验证访问令牌和刷新令牌的有效性

NOTE: 可以通过 Verifier.GetInfo 获得当前令牌关联的用户信息,通过 [Claims.BaseToken] 判断是否为刷新令牌;

Jump to

Keyboard shortcuts

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