Categorytrpc.group/trpc-go/trpc-filter/jwt
modulepackage
1.0.1
Repository: https://github.com/trpc-ecosystem/go-filter.git
Documentation: pkg.go.dev

# README

tRPC-Go [jwt] 用户身份验证拦截器

Go Reference Go Report Card Tests Coverage

jwt 插件使用说明

I. 必要条件

  • 匿名导入该插件:
import (
_ "trpc.group/trpc-go/trpc-filter/jwt"
)
  • TRPC框架配置文件, 开启 jwt 拦截器
server:
  ...
  filter:
    ...
    - jwt
plugins:
  auth:
    jwt:
      secret: q7wt3n1t # 私钥
      expired: 3600    # jwt签名过期时间,单位秒
      issuer: tencent  # 签发者
      exclude_paths:   # [可选] path白名单-如登陆接口不进行jwt校验
        - /v1/login

II. 可选

  • 校验成功后,通过 GetCustomInfo方法,可以从 ctx 中获取用户信息
// GetCtxAuthInfo 从 ctx 中获取用户信息
func GetCtxAuthInfo(ctx context.Context) *AuthInfo {
    var authInfo = &AuthInfo{}
    if err := jwt.GetCustomInfo(ctx, authInfo); err != nil {
        return err
    }
    return authInfo
}
  • 用户可以自定义 token 的逻辑,覆盖 jwt.DefaultParseTokenFunc 函数即可。
jwt.DefaultParseTokenFunc = func(ctx context.Context, req interface{}) (string, error) {
    head := trpcHttp.Head(ctx)
    token := head.Request.Header.Get("Authorization")
    return strings.TrimPrefix(token, "Bearer "), nil
}
  • 更进一步,用户可以通过实现 Signer 接口,来实现自己的签名生成、验证逻辑; 然后通过 SetDefaultSigner(s)方法覆盖默认的签名器。
// Signer 数字签名器接口
type Signer interface {
	Sign(custom interface{}) (string, error)
	Verify(token string) (interface{}, error)
}

SetDefaultSigner(NewCustomSigner())

# Functions

GetCustomInfo 获取用户信息 (参数 ptr 为struct的指针对象).
NewJwtSign 构造 jwt 签名.
ServerFilter 设置服务端增加 jwt 验证.
SetDefaultSigner 设置默认 signer.
WithExcludePathSet 设置 path 白名单.

# Constants

AuthJwtCtxKey context key.

# Variables

DefaultParseTokenFunc 默认获取 token 的函数, 用户可自定义实现.
DefaultSigner 默认的 signer.
ErrInvalidToken 非法 token.

# Structs

Config 插件配置.

# Interfaces

Signer 数字签名器接口.

# Type aliases

ContextKey 定义类型.
Option 设置参数选项.