zoukankan      html  css  js  c++  java
  • Go jwt 验证

    设计知识点

    jwt-go
    github.com/dgrijalva/jwt-go

    代码

    package main
    
    import (
        "errors"
        "fmt"
        "github.com/dgrijalva/jwt-go"
        "time"
    )
    
    const SecretKey string = "123123123123"
    
    type Payload struct{
        Name string
        Claims jwt.StandardClaims
    }
    
    func (p Payload) Valid() error {
        panic("implement me")
    }
    
    func main(){
        // jwt 简单使用
        // jwt 组成 header.payload.signature 中间 用 "." 进行相连接
        // 生成 token
        token, _ := GenerateToken("zxx", "123")
        // 解析 token
        parseToken, _ := ParseToken(token)
        fmt.Println(parseToken)
    }
    
    // 生成 token
    func GenerateToken(username, password string)(string, error){
        nowTime := time.Now()  //当前时间
        expireTime := nowTime.Add(3 * time.Hour)  //有效时间
    
        // 此处为 jwt 的请求 中间 payload 部分 可任意添加 内容
        tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, Payload{
            Name: "zhao",
    
            Claims: jwt.StandardClaims{
            ExpiresAt: expireTime.Unix(), // 过期时间
            Issuer:    "jack",            // 发行人
            //Audience     接收者
            //Id           jwt 的编号
            //IssuedAt     签发时间
            //NotBefore    签名生效时间
            //Subject      主题
    
        }})
    
        // 此处为 增加 密钥 生成完整的 jwt 个人理解: jwt的 第三部分
        signedString, err := tokenClaims.SignedString(SecretKey)
        return signedString, err
    }
    
    // 解析 token
    func ParseToken(tokenStr string)(string, error){
        // 解析 token
        token, _ := jwt.ParseWithClaims(tokenStr, &jwt.StandardClaims{}, func(token *jwt.Token) (interface{}, error) {
            return "", nil
        })
    
        // 头部 token.Header  中间部分 token.Claims 尾部 token.Signature
        // 取 jwt 中间部分
        claims, _ := token.Claims.(jwt.MapClaims)
    
        // 检查令牌是否有效
        if token.Valid{
            return claims["claims"].(string), nil
        } else {
            return claims["claims"].(string), errors.New("token无效")
        }
    }
    邮箱: 1090055252@qq.com
  • 相关阅读:
    HDU1163 Eddy's digital Roots【九剩余定理】
    【ThinkingInC++】8、说明,浅谈数据类型的大小
    教你如何使用U盘装系统
    图像不显示该问题的解决方案
    HTTP相关概念
    AndroidUI的组成部分GridView
    uploadify 3.2 后台动态传参数
    Oracle11g创建表空间语句
    Uncaught RangeError: Maximum call stack size exceeded解决思路
    panel,dialog,window组件越界问题汇总
  • 原文地址:https://www.cnblogs.com/zhaoxianxin/p/14417604.html
Copyright © 2011-2022 走看看