golang JWT 包生成 Token, 验证 Token

栏目: Go · 发布时间: 5年前

内容简介:简介json web token 简称 jwt 是一种轻量级的规范常用与用户认证

简介

json web token 简称 jwt 是一种轻量级的规范

常用与用户认证

大致由 3 部分构成:

Header (头部)

Payload (载荷)

Signature (签名)

用.拼接

Token = Header + '.' + Payload + '.' + Signature

Header

用来表明签名的加密算法 token 类型等.

{

"typ": "JWT",

"alg": "HS256"lag

}

以上 json 转为 base64 生成 header

Payload

Payload 记录你需要的信息. 其中应该包含 Claims

Claims

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"

  1. aud 标识token的接收者.
  2. exp 过期时间.通常与Unix UTC时间做对比过期后token无效
  3. jti 是自定义的id号
  4. iat 签名发行时间.
  5. iss 是签名的发行者.
  6. nbf 这条token信息生效时间.这个值可以不设置,但是设定后,一定要大于当前Unix UTC,否则token将会延迟生效.
  7. sub 签名面向的用户
    Signature
    通过 header 生明的加密方法生成 签名.

JWT 包下载

go get github.com/dgrijalva/jwt-go

简单使用

生成 Token

Payload 结构体

type jwtCustomClaims struct {

jwt.StandardClaims

// 追加自己需要的信息

Uid uint json:"uid"

Admin bool json:"admin"

}

编写生成 token 的函数

/**

  • 生成 token
  • SecretKey 是一个 const 常量
    */
    func CreateToken(SecretKey []byte, issuer string, Uid uint, isAdmin bool) (tokenString string, err error) {
    claims := &jwtCustomClaims{
    jwt.StandardClaims{
    ExpiresAt: int64(time.Now().Add(time.Hour * 72).Unix()),
    Issuer: issuer,
    },
    Uid,
    isAdmin,
    }
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    tokenString, err = token.SignedString(SecretKey)
    return
    }
    test 一下

func TestCreateToken(t *testing.T) {

token, _ := CreateToken([]byte(SecretKey), "YDQ", 2222, true)

fmt.Println(token)

}

结果是这样的.

=== RUN TestCreateToken

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDA2MDc2MzYsImlzcyI6IllEUSIsInVpZCI6MjIyMiwiYWRtaW4iOnRydWV9.oaX63ScaDttkhC31bgjvPSr4PjvBb55UanAA_QP5zpc

--- PASS: TestCreateToken (0.00s)

PASS

解析 Token

解析函数

/**

  • 解析 token

    */

    func ParseToken(tokenSrt string, SecretKey []byte) (claims jwt.Claims, err error) {

    var token

    jwt.Token

    jwt.Token) (interface{}, error) {

    return SecretKey, nil

    })

    claims = token.Claims

    return

    }

    合并到一直测试.

func TestCreateToken(t *testing.T) {

token, _ := CreateToken([]byte(SecretKey), "YDQ", 2222, true)

fmt.Println(token)

claims, err := ParseToken(token, []byte(SecretKey))

if nil != err {

fmt.Println("err :", err)

}

fmt.Println("claims:", claims)

fmt.Println("claims uid:", claims.(jwt.MapClaims)["uid"])

}

结果是这样的.

=== RUN TestCreateToken

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDA2MDgyODgsImlzcyI6IllEUSIsInVpZCI6MjIyMiwiYWRtaW4iOnRydWV9.8wE-_Wx-DHI2GMXJ9KT5JOndst2CCEaUNEIGDy9CUbM

claims: map[exp:1.540608288e+09 iss:YDQ uid:2222 admin:true]

claims uid: 2222

--- PASS: TestCreateToken (0.00s)

PASS


以上所述就是小编给大家介绍的《golang JWT 包生成 Token, 验证 Token》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网页美工传奇

网页美工传奇

姜伟 / 机械工业出版社 / 2004-5 / 27.0

本书作为一本专门针对网页美工的书籍,在阐述网页设计理念的基础上,以生动的实例引导读者深入地掌握网页的美工技术,使读者在短时间内就可以迅速地提高自己的美工能力。全书共分为11章,分别介绍色彩知识、设计创意、网页规划、广告、背景、按钮、图形处理、文字效果、动画制作、CSS和JavaScript应用等内容。本书主要面向具有一定Flash和Photoshop基础的读者,对于专业的网页设计人员来说,更是一本......一起来看看 《网页美工传奇》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试