beego中引入jwt权限认证,有效的实行SSO(单点登录)

beego简介

beego是一款使用golang开发的流行框架.github.com上地址

go get github.com/astaxie/beego

jwt简介

请参考地址:http://blog.csdn.net/hzwy23/article/details/53224724

基于jwt写的两个函数

package hjwt

import (
    "fmt"
    "time"

    jwt "github.com/dgrijalva/jwt-go"
    "github.com/hzwy23/hcloud/logs"
)

var (
    key []byte = []byte("-jwt-hzwy23@163.com")
)

// 产生json web token
func GenToken() string {
    claims := &jwt.StandardClaims{
        NotBefore: int64(time.Now().Unix()),
        ExpiresAt: int64(time.Now().Unix() + 1000),
        Issuer:    "hzwy23",
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    ss, err := token.SignedString(key)
    if err != nil {
        logs.Error(err)
        return ""
    }
    return ss
}

// 校验token是否有效
func CheckToken(token string) bool {
    _, err := jwt.Parse(token, func(*jwt.Token) (interface{}, error) {
        return key, nil
    })
    if err != nil {
        fmt.Println("parase with claims failed.", err)
        return false
    }
    return true
}

接下来,在beego启动前,加入过滤器.过滤器代码如下:

    beego.InsertFilter("/platform/*", beego.BeforeRouter, func(ctx *context.Context) {
        cookie, err := ctx.Request.Cookie("Authorization")
        if err != nil || !hjwt.CheckToken(cookie.Value) {
            http.Redirect(ctx.ResponseWriter, ctx.Request, "/", http.StatusMovedPermanently)
        }
    })

InsertFilter第一个参数,就会执行过滤函数.

在这个过程中,需要将json web token值设置到cookies中.golang中设置cookies方法如下:

token := hjwt.GenToken()
cookie := http.Cookie{Name: "Authorization", Value: token, Path: "/", MaxAge: 3600}
http.SetCookie(w, &cookie)

上述流程,只是采用初简的方式,在beego中使用json web token进行权限认证.后边发现新的方式,再继续更新.

总结

jwt作为一种流行的授权认证系统.在beego中引入,可以方便的进行API授权管理.系统权限管理等等.

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页