首页 > 其他 > 详细

Go jwt 验证

时间:2021-02-19 23:56:03      阅读:30      评论:0      收藏:0      [点我收藏+]

设计知识点

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无效")
    }
}

 

Go jwt 验证

原文:https://www.cnblogs.com/zhaoxianxin/p/14417604.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!