通过jwt基于token实现登陆认证通过jwt基于token实现登陆认证

简介: 通过jwt基于token实现登陆认证通过jwt基于token实现登陆认证
package main

import (
    "fmt"
    "net/http"
    "time"

    "github.com/dgrijalva/jwt-go"
    "github.com/gin-gonic/gin"
)

//自定义一个字符串
var jwtkey = []byte("eryajf.net")
var str string

type Claims struct {
   
    UserId uint
    jwt.StandardClaims
}

func main() {
   
    r := gin.Default()
    r.GET("/set", setting)
    r.GET("/get", getting)
    //监听端口默认为8080
    r.Run(":8080")
}

//颁发token
func setting(ctx *gin.Context) {
   
    expireTime := time.Now().Add(7 * 24 * time.Hour)
    claims := &Claims{
   
        UserId: 2,
        StandardClaims: jwt.StandardClaims{
   
            ExpiresAt: expireTime.Unix(), //过期时间
            IssuedAt:  time.Now().Unix(),
            Issuer:    "127.0.0.1",  // 签名颁发者
            Subject:   "user token", //签名主题
        },
    }
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    // fmt.Println(token)
    tokenString, err := token.SignedString(jwtkey)
    if err != nil {
   
        fmt.Println(err)
    }
    // str = tokenString
    ctx.JSON(http.StatusOK, gin.H{
   "code": 200, "token": tokenString})
}

//解析token
func getting(ctx *gin.Context) {
   
    tokenString := ctx.GetHeader("Authorization") //从header中取Authorization这个key,再与刚刚的token进行比对
    // 先判断取到的是否为空,为空则跳出
    if tokenString == "" {
   
        ctx.JSON(http.StatusUnauthorized, gin.H{
   "code": 401, "msg": "权限不足"})
        ctx.Abort()
        return
    }
    // 再来解析token,解析失败则跳出
    token, claims, err := ParseToken(tokenString)
    if err != nil || !token.Valid {
   
        ctx.JSON(http.StatusUnauthorized, gin.H{
   "code": 401, "msg": "权限不足"})
        ctx.Abort()
        return
    }
    // 最后成功了
    ctx.JSON(http.StatusOK, gin.H{
   "code": 200, "id": claims.UserId, "msg": "认证通过"})

}

// ParseToken 解析token
func ParseToken(tokenString string) (*jwt.Token, *Claims, error) {
   
    Claims := &Claims{
   }
    token, err := jwt.ParseWithClaims(tokenString, Claims, func(token *jwt.Token) (i interface{
   }, err error) {
   
        return jwtkey, nil
    })
    return token, Claims, err
}
目录
相关文章
|
1月前
|
JSON JavaScript 前端开发
❤Nodejs 第九章(token身份认证和express-jwt的安装认识)
【4月更文挑战第9天】Node.js第九章介绍了Token身份认证,特别是JWT(JSON Web Token)作为跨域认证的解决方案。JWT由Header、Payload和Signature三部分组成,用于在客户端和服务器间安全传输用户信息。前端收到JWT后存储在localStorage或sessionStorage中,并在请求头中发送。Express-JWT是一个中间件,用于解析JWT。基本用法包括设置secret和algorithms。注意安全问题,避免混合使用不同算法以防止降级攻击。
58 0
|
1月前
|
安全 Java Spring
Spring Security+jwt实现认证
Spring Security+jwt实现认证
|
1月前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
116 0
|
12天前
|
消息中间件 Serverless Go
Serverless 应用引擎操作报错合集之通过自定义域名配置jwt认证,始终报错:"Code": "JWTTokenIsInvalid",是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
1天搞定SpringBoot+Vue全栈开发 (9)JWT跨域认证
1天搞定SpringBoot+Vue全栈开发 (9)JWT跨域认证
|
8天前
|
JSON 安全 Java
Spring Security 与 JWT、OAuth 2.0 整合详解:构建安全可靠的认证与授权机制
Spring Security 与 JWT、OAuth 2.0 整合详解:构建安全可靠的认证与授权机制
22 0
|
1月前
|
JSON SpringCloudAlibaba Cloud Native
SpringCloudAlibaba:4.3云原生网关higress的JWT 认证
SpringCloudAlibaba:4.3云原生网关higress的JWT 认证
34 1
|
1月前
|
运维 Serverless API
Serverless 应用引擎产品使用之阿里函数计算中要关掉http触发器的jwt认证才可以进行性能探测如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
1月前
|
JSON 安全 API
【专栏】四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥
【4月更文挑战第28天】本文探讨了四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥。基本认证简单但不安全;OAuth适用于授权第三方应用;JWT提供安全的身份验证信息传递;API密钥适合内部使用。选择方法时需平衡安全性、用户体验和开发复杂性。
|
1月前
|
存储 JSON 算法
SpringBoot之JWT令牌校验
SpringBoot之JWT令牌校验
49 2