jwt

package module
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Apr 24, 2024 License: Apache-2.0, BSD-3-Clause, MIT Imports: 10 Imported by: 0

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())

Documentation

Overview

Package jwt 身份认证

Index

Constants

View Source
const (
	// AuthJwtCtxKey context key
	AuthJwtCtxKey = ContextKey("AuthJwtCtxKey")
)

Variables

View Source
var 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
}

DefaultParseTokenFunc 默认获取 token 的函数, 用户可自定义实现

View Source
var (
	// ErrInvalidToken 非法 token
	ErrInvalidToken = fmt.Errorf("invalid token")
)

Functions

func GetCustomInfo

func GetCustomInfo(ctx context.Context, ptr interface{}) error

GetCustomInfo 获取用户信息 (参数 ptr 为struct的指针对象)

func ServerFilter

func ServerFilter(opts ...Option) filter.ServerFilter

ServerFilter 设置服务端增加 jwt 验证

func SetDefaultSigner

func SetDefaultSigner(s Signer)

SetDefaultSigner 设置默认 signer

Types

type Config

type Config struct {
	Secret       string   `yaml:"secret"`        // 签名使用的私钥
	Expired      int      `yaml:"expired"`       // 过期时间 seconds
	Issuer       string   `yaml:"issuer"`        // 发行人
	ExcludePaths []string `yaml:"exclude_paths"` // 跳过 jwt 鉴权的 paths, 如登陆接口
}

Config 插件配置

type ContextKey

type ContextKey string

ContextKey 定义类型

type Option

type Option func(*options)

Option 设置参数选项

func WithExcludePathSet

func WithExcludePathSet(set map[string]bool) Option

WithExcludePathSet 设置 path 白名单

type Signer

type Signer interface {
	Sign(custom interface{}) (string, error)
	Verify(token string) (interface{}, error)
}

Signer 数字签名器接口

var DefaultSigner Signer

DefaultSigner 默认的 signer

func NewJwtSign

func NewJwtSign(secret []byte, expired time.Duration, issuer string) Signer

NewJwtSign 构造 jwt 签名

Jump to

Keyboard shortcuts

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