Firmeve
1.0.0
1.0.0
  • Firmeve
  • [核心组件]
    • 应用
    • 容器
    • 配置
    • 提供者
    • 事件
    • 日志
    • 命令
  • [基础组件]
    • Http服务
    • 数据验证
    • 数据库
    • 缓存
    • JWT
    • Redis
    • 辅助函数
    • 队列
    • 计划任务
Powered by GitBook
On this page
  • 简介
  • 基础示例
  • 创建Jwt实例
  • 生成token
  • 解析token
  • 验证token
  • 其它方法
  • 自定义存储器

Was this helpful?

  1. [基础组件]

JWT

简介

json web token

基础示例

使用Jwt必须先实现签发者接口

JwtAudience interface {
        Audience() string
}

创建Jwt实例

var    (
    jwtConfig = config.Item("jwt")
  memoryStore = jwt.NewMemoryStore()
)

// 创建jwt
jwt := New("secret", jwtConfig, memoryStore)

假设有User实现JwtAudience

type User struct {
  Id string
}

func (u *User) Audience() string {
  return u.Id
}

生成token

user := &User{
  Id: "uu3012"
}

token , err := jwt.Create(user)
if err != nil {
  fmt.Printf("create jwt error %s", err)
  return
}

// output
/*
Token struct {
  Lifetime int64  `json:"lifetime"`
  Token    string `json:"token"`
  Type     string `json:"type"`
}
*/
fmt.Printf("%v",token)

解析token

var token = "token"

// 解析token
claims ,err := jwt.Parse(token)
if err != nil {
  fmt.Printf("parse token error %s", err)
}

// output
/*
type StandardClaims struct {
    Audience  string `json:"aud,omitempty"`
    ExpiresAt int64  `json:"exp,omitempty"`
    Id        string `json:"jti,omitempty"`
    IssuedAt  int64  `json:"iat,omitempty"`
    Issuer    string `json:"iss,omitempty"`
    NotBefore int64  `json:"nbf,omitempty"`
    Subject   string `json:"sub,omitempty"`
}
*/
fmt.Printf("%v", claims)

验证token

var token = "token"

is,err := jwt.Valid(token)
if err != nil {
  // 验证是否过期
  if errors.Is(err, jwt.ValidationErrorExpired) {
    // 过期错误
  }
}

if is {
  // ok
}

其它方法

// 刷新token
token := "token"
if err := jwt.Refresh(token); err != nil {
  fmt.Printf("refresh token error %s", err)
}

// 加入黑名单
if err := jwt.Invalidate(token); err != nil {
  fmt.Printf("invalidate token error", err)
}

自定义存储器

系统默认自带内存存储器,通常在分布式应用中你需要其它存储引擎,实现起来也非常简单,只需要实现JwtStore 接口,如下示例:

JwtStore interface {
  Has(id string) bool

  Put(id string, audience JwtAudience, lifetime time.Time) error

  Forget(audience JwtAudience) error
}

type RedisStore struct {

}

jwt := New("secret", jwtConfig, new(RedisStore))
Previous缓存NextRedis

Last updated 4 years ago

Was this helpful?