grpc middleware

var authFunc grpc_auth.AuthFunc
{
		authFunc = func(ctx context.Context) (context.Context, error) {
			logger.Debug("platform authfun run !")
			token, err := tools.ParseJwtToken(ctx)
			if err != nil {
				return nil, ErrMiddlewareParseJwtFailure
			}
			client, err := cli.NewAuthClient(zap.NewExample(), AuthUrl, false)
			if err != nil {
				return nil, ErrInitAuthClient
			}
			_, err = client.ValidateToken(ctx, token)
			// ValidateToken已对err封装
			if err != nil {
				return nil, err
			}
			logger.Debug("platform middleware authfun run over , Check passed !")
			return ctx, nil
		}
}

将grpc_auth加入到middleware中

image

重写authFunc,存在AuthFuncOverride则不会调用authfunc,需要将其配置到注册服务里。

func (s *Service)AuthFuncOverride(ctx context.Context, fullMethodName string) (context.Context, error) {
	if fullMethodName == MethodValidateToken || fullMethodName == MethodAuthenticate{
		return ctx, nil
	}
	s.logger.Debug("authfun run , client is calling method:" + fullMethodName)
	token, err := tools.ParseJwtToken(ctx)
	if err != nil {
		return ctx, ErrMiddlewareParseJwtFailure
	}

	_, err = s.ValidateToken(ctx, &pb.ValidateTokenRequest{
		JwtToken: token,
	})
	// ValidateToken 中已经对err进行封装
	if err != nil {
		return ctx, err
	}
	s.logger.Debug("platform middleware authfun run over , check passed !")
	return ctx, nil
}

image

  • 参考:https://www.cnblogs.com/FireworksEasyCool/p/12750339.html

  • 参考:https://godoc.org/github.com/grpc-ecosystem/go-grpc-middleware/auth

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值