1package grpc_auth_test 2 3import ( 4 "context" 5 6 "github.com/grpc-ecosystem/go-grpc-middleware/auth" 7 "github.com/grpc-ecosystem/go-grpc-middleware/tags" 8 "google.golang.org/grpc" 9 "google.golang.org/grpc/codes" 10) 11 12var ( 13 cc *grpc.ClientConn 14) 15 16func parseToken(token string) (struct{}, error) { 17 return struct{}{}, nil 18} 19 20func userClaimFromToken(struct{}) string { 21 return "foobar" 22} 23 24// Simple example of server initialization code. 25func Example_serverConfig() { 26 exampleAuthFunc := func(ctx context.Context) (context.Context, error) { 27 token, err := grpc_auth.AuthFromMD(ctx, "bearer") 28 if err != nil { 29 return nil, err 30 } 31 tokenInfo, err := parseToken(token) 32 if err != nil { 33 return nil, grpc.Errorf(codes.Unauthenticated, "invalid auth token: %v", err) 34 } 35 grpc_ctxtags.Extract(ctx).Set("auth.sub", userClaimFromToken(tokenInfo)) 36 newCtx := context.WithValue(ctx, "tokenInfo", tokenInfo) 37 return newCtx, nil 38 } 39 40 _ = grpc.NewServer( 41 grpc.StreamInterceptor(grpc_auth.StreamServerInterceptor(exampleAuthFunc)), 42 grpc.UnaryInterceptor(grpc_auth.UnaryServerInterceptor(exampleAuthFunc)), 43 ) 44} 45