• [Go] go语言使用dgrijalva/jwt-go 实现加解密jwt


    当开发登录验证系统的时候

    现在基本都是使用的jwt来实现的权限校验

    这时候就涉及到了jwt的加密和解密

    可以参考下面的使用方法

    tools/jwt.go

    package tools
    
    import (
        "github.com/dgrijalva/jwt-go"
        "time"
    )
    
    const SECRET = "taoshihan"
    
    type UserClaims struct {
        Id         uint      `json:"id"`
        Pid        uint      `json:"pid"`
        Username   string    `json:"username"`
        RoleId     uint      `json:"role_id"`
        CreateTime time.Time `json:"create_time"`
        jwt.StandardClaims
    }
    
    
    func MakeCliamsToken(obj UserClaims) (string, error) {
        token := jwt.NewWithClaims(jwt.SigningMethodHS256, obj)
        tokenString, err := token.SignedString([]byte(SECRET))
        return tokenString, err
    }
    func ParseCliamsToken(token string) (*UserClaims, error) {
        tokenClaims, err := jwt.ParseWithClaims(token, &UserClaims{}, func(token *jwt.Token) (interface{}, error) {
            return []byte(SECRET), nil
        })
    
        if tokenClaims != nil {
            if claims, ok := tokenClaims.Claims.(*UserClaims); ok && tokenClaims.Valid {
                return claims, nil
            }
        }
        return nil, err
    }

    测试

    tools/jwt_test.go

    package tools
    
    import (
        "github.com/dgrijalva/jwt-go"
        "testing"
        "time"
    )
    
    func TestJwt(t *testing.T) {
        tokenCliams := UserClaims{
            Id:         1,
            Username:   "kefu2",
            RoleId:     2,
            Pid:        1,
            CreateTime: time.Now(),
            StandardClaims: jwt.StandardClaims{
                ExpiresAt: time.Now().Unix() + 24*3600,
            },
        }
        token, err := MakeCliamsToken(tokenCliams)
        t.Log(token, err)
    
        orgToken, err := ParseCliamsToken(token)
        t.Logf("%+v,%+v", orgToken, err)
    }

    运行测试用例,可以看到加解密效果

    可以测试下过期

     

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com
  • 相关阅读:
    进阶学习项目实战链接
    Django与数据库操作
    xadmin的使用
    Django 常见的异常
    网站 安全 ---- 常见的 web 攻击
    nodejs--vue
    ECMAScript 6 简介
    Django -- DRF 认证流程
    Django -- 缓存
    Django --- celery异步任务与RabbitMQ模块
  • 原文地址:https://www.cnblogs.com/taoshihan/p/15239208.html
Copyright © 2020-2023  润新知