我在开发 Go gRPC 服务并实现授权功能。字面意思是基于 JWT 的声明允许或禁止访问 gRPC 方法。
我在
我在
grpc.UnaryServerInterceptor
层级上进行 JWT 解析,提取声明并将其填充到上下文中的值,如果没有 JWT 或者 JWT 不正确则未经身份验证。func (s *Server) GetSomething(ctx context.Context, req *GetSomething Request) (*GetSomething Response, error) {
if hasAccessTo(ctx, req.ID) {
//some work here
}
}
func hasAccessTo(ctx context.Context, string id) {
value := ctx.Value(ctxKey).(MyStruct)
//some work here
}
那么,我想知道是否有一些通用的授权/身份验证实践可以避免在每个grpc服务器方法中写样板代码?
UnaryInterceptor
。如果您需要一个可行的示例,我可以提供一个。 - Trevor V