zoukankan      html  css  js  c++  java
  • 27.Jwt集成(1):使用第三方库,token的基本生成和验

    使用第三方库jwt-go进行加密和验证

    package main
    
    import (
        "fmt"
        "github.com/dgrijalva/jwt-go"
    )
    
    type UserClaim struct {
        Uname              string `json:"username"`
        jwt.StandardClaims        //嵌套了这个结构体就实现了Claim接口
    }
    
    func main() {
        sec := []byte("123abc")
        //hs256
        //生成jwt
        token_obj := jwt.NewWithClaims(jwt.SigningMethodHS256, UserClaim{Uname: "xiahualou"}) //使用HS256加密算法加密
        token, _ := token_obj.SignedString(sec)                                               //把秘钥传进去,生成签名token
        fmt.Println(token)
    
        uc := UserClaim{}
        //验证jwt
        getToken, _ := jwt.Parse(token, func(token *jwt.Token) (i interface{}, e error) {
            return sec, nil //这里是对称加密,所以只要有人拿到了这个sec就可以进行访问不安全
        })
        //用下面这种解析方式可以把解析后的结果保存到结构体中去
        getToken, _ = jwt.ParseWithClaims(token, &uc, func(token *jwt.Token) (i interface{}, e error) {
            return sec, nil
        })
        //验证jwt是否有效
        if getToken.Valid {
            fmt.Println(getToken.Claims.(*UserClaim).Uname) //使用断言判断具体的claim直接取值
        }
    }
    




  • 相关阅读:
    redis搭建集群
    redis搭建主从
    redis与python交互
    redis数据操作篇
    redis配置篇
    node 淘宝镜像
    java 深copy
    springmvc配置访问静态文件
    centos 启动 oracle
    List 分隔多次执行 且在同一个事物当中
  • 原文地址:https://www.cnblogs.com/hualou/p/12090555.html
Copyright © 2011-2022 走看看