Ai
1 Star 0 Fork 0

PengHengBen/rpc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
auth.go 1.10 KB
一键复制 编辑 原始数据 按行查看 历史
PengHengBen 提交于 2023-12-04 15:09 +08:00 . 补充protobuf认证中间件
package auth
import (
"context"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/status"
)
var (
ClientIdKey = "client-id"
ClientSecretKey = "client-key"
)
// 认证中间件
func AuthInterceptor(ctx context.Context,
req any,
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler) (
resp any, err error) {
// 1. 获取用户传递的 认证信息
// http 1.1 header map[string][]string
// http2/grpc meta == http2 header
// 怎么获取Header,这个header信息是放到 请求的上下文中: ctx
// 从ctx中获取 meta信息
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return nil, fmt.Errorf("meta data required")
}
ck := md.Get(ClientIdKey)
if len(ck) == 0 {
// grpc
return nil, status.Errorf(codes.PermissionDenied, "ClientIdKey required")
}
sk := md.Get(ClientSecretKey)
if len(sk) == 0 {
return nil, fmt.Errorf("ClientSecretKey required")
}
if !(ck[0] == "admin" && sk[0] == "123456") {
return nil, fmt.Errorf("auth failed")
}
// 路由给后面的请求处理
return handler(ctx, req)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/penghengben/rpc.git
git@gitee.com:penghengben/rpc.git
penghengben
rpc
rpc
5d9b87fcae40

搜索帮助