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授权管理.系统权限管理等等.

阅读更多
换一批

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