Beego实现JWT

507 2023年04月14日 go

Beego是一个基于Go语言的Web框架,实现JWT认证可以通过beego的中间件机制来实现,下面是一个简单的示例代码:

package main

import (
    "github.com/astaxie/beego"
    "github.com/dgrijalva/jwt-go"
    "net/http"
    "time"
)

func main() {
    beego.Router("/", &MainController{})
    beego.InsertFilter("/secure/*", beego.BeforeExec, ValidateToken)
    beego.Run()
}

type MainController struct {
    beego.Controller
}

func (c *MainController) Get() {
    c.Ctx.WriteString("Hello, world!")
}

func ValidateToken(ctx *context.Context) {
    tokenString := ctx.Input.Header("Authorization")
    if tokenString == "" {
        ctx.Abort(401, "Unauthorized")
        return
    }
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
            return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
        }
        return []byte("secret"), nil
    })
    if err != nil {
        ctx.Abort(401, "Unauthorized")
        return
    }
    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        ctx.Input.SetData("claims", claims)
        return
    }
    ctx.Abort(401, "Unauthorized")
}

func LoginHandler(ctx *context.Context) {
    username := ctx.Input.Query("username")
    password := ctx.Input.Query("password")
    if username == "\*\*\*" && password == "\*\*\*" {
        token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
            "username": "\*\*\*",
            "exp":      time.Now().Add(time.Hour * 24).Unix(),
        })
        tokenString, err := token.SignedString([]byte("secret"))
        if err != nil {
            ctx.Abort(500, "Internal Server Error")
            return
        }
        ctx.Output.Header("Authorization", tokenString)
        ctx.Output.SetStatus(200)
        return
    }
    ctx.Abort(401, "Unauthorized")
}

上面的代码中,我们定义了一个ValidateToken中间件,在访问/secure/*路径时验证JWT的有效性。LoginHandler用于生成JWT并返回给客户端。在路由中,我们通过beego.InsertFilter方法将ValidateToken中间件应用到了/secure/*路径。

评论

0 条评论
OBJUI公众号
热门文章
  • Beego实现JWT

    Beego是一个基于Go语言的Web框架,实现JWT认证可以通过beego的中间件机制来实现,下面是一个简单的 […]

  • go语言怎么连接mysql,并实现增删改查

    要使用Go语言连接MySQL,需要使用第三方库。常用的库包括: 这里以go-sql-driver/mysql为 […]

  • beego实现模块化开发

    Beego 框架可以通过模块化开发来提高项目的可维护性和可扩展性,可以将一个大型的应用划分为多个模块,每个模块独立维护,有自己的控制器、视图和模型等。

  • 使用Axios+PHP+JWT实现登录认证

    JWT(JSON Web Token),顾名思义就是可以在Web上传输的token,这种token是用JSON格式进行format的。它是一个开源标准(RFC7519),定义了一个紧凑的自包含的方式在不同实体之间安全的用JSON格式传输信息。

  • 使用Echarts画甘特图

    Echarts是一个非常强大的图表库, 下面我们来使用它来画甘特图,

  • Linux服务器Rsync结合inotify同步文件

    一、实现效果 服务器A:192.168.161.150 (分布服务器)(rsync客户端+inotify) 服务器B:192.168.161.151 (WEB服务器1)(rsync服务端) 服务器C:192.168.161.152 (WEB服务器2)(rsync服务端) 说明:服务器A有文件更新,自动同步到服务器B和C

  • OAuth 2.0授权认证

    OAuth 2.0一个关于授权的开放的网络协议。用户同意授权给第三方使用系统数据,系统分发一个临时令牌(Token),第三方可通过令牌获取相关数据。

  • Composer实现自动加载

    Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

  • wordpress自定义配置

    在制作插件时,自定义的配置项是经常会遇到的。在左侧“配置”的常规菜单下添加配置以下代码可实现:

  • Nginx 配置https

    SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现: 1、数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听; 2、用户可以通过服务器证书验证他所访问的网站是否真实可靠。