代码拉取完成,页面将自动刷新
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)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。