1 Star 0 Fork 0

天雨流芳 / go-micro-framework

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
auto.go 1.62 KB
一键复制 编辑 原始数据 按行查看 历史
天雨流芳 提交于 2024-03-29 17:26 . 基于gin的server
package strategy
import (
"gitee.com/tylf2018/go-micro-framework/pkg/code"
"gitee.com/tylf2018/go-micro-framework/pkg/common/core"
"gitee.com/tylf2018/go-micro-framework/pkg/errors"
"gitee.com/tylf2018/go-micro-framework/server/restserver/middlewares/auth"
"strings"
"github.com/gin-gonic/gin"
)
const authHeaderCount = 2
// AutoStrategy defines authentication strategy which can automatically choose between Basic and Bearer
// according `Authorization` header.
type AutoStrategy struct {
basic *BasicStrategy
jwt *JWTStrategy
}
// NewAutoStrategy create auto strategy with basic strategy and jwt strategy.
// NewAutoStrategy 使用 basic策略 和 jwt策略 创建自动策略
func NewAutoStrategy(basic *BasicStrategy, jwt *JWTStrategy) AutoStrategy {
return AutoStrategy{
basic: basic,
jwt: jwt,
}
}
// AuthFunc defines auto strategy as the gin authentication middleware.
func (a AutoStrategy) AuthFunc() gin.HandlerFunc {
return func(c *gin.Context) {
operator := auth.AuthOperator{}
authHeader := strings.SplitN(c.Request.Header.Get("Authorization"), " ", 2)
if len(authHeader) != authHeaderCount {
core.WriteResponse(
c,
errors.WithCode(code.ErrInvalidAuthHeader.Code(), "Authorization header format is wrong."),
nil,
)
c.Abort()
return
}
switch authHeader[0] {
case "Basic":
operator.SetStrategy(a.basic)
case "Bearer":
operator.SetStrategy(a.jwt)
// a.JWT.MiddlewareFunc()(c)
default:
core.WriteResponse(c, errors.WithCode(code.ErrSignatureInvalid.Code(), "unrecognized Authorization header."), nil)
c.Abort()
return
}
operator.AuthFunc()(c)
c.Next()
}
}
1
https://gitee.com/tylf2018/go-micro-framework.git
git@gitee.com:tylf2018/go-micro-framework.git
tylf2018
go-micro-framework
go-micro-framework
4cc90ded505a

搜索帮助