tlsclient.go 1.42 KB
package main

import (
	"context"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials"
	"google.golang.org/protobuf/types/known/emptypb"
	"log"
	"pro2d/components/jwt"
	_ "pro2d/conf"
	"pro2d/protos/pb"
	"pro2d/utils"
)
// AuthToken 自定义认证 客户端使用
type CustomToken struct {
}

func (c CustomToken) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {
	return map[string]string{
		"appId": "100",
		"appKey": "token",
	}, nil
}

func (c CustomToken) RequireTransportSecurity() bool {
	return true
}

func main() {
	var opts []grpc.DialOption
	creds, err := credentials.NewClientTLSFromFile("keys/server.pem", "pro2d")
	if err != nil {
		log.Fatal(err)
		return
	}
	opts = append(opts, grpc.WithTransportCredentials(creds))
	conn, err := grpc.Dial("localhost:8948", opts...)

	helloClient := pb.NewHelloClient(conn)
	token, err := helloClient.CreateToken(context.TODO(), &pb.Login{
		Login:    "login",
		Password: "123456",
	})
	if err != nil {
		log.Fatal(err)
		return
	}
	utils.Sugar.Debugf("token: %s", token.Token)

	opts = append(opts, grpc.WithPerRPCCredentials(&jwt.AuthToken{Token: token.Token}))
	conn2, err := grpc.Dial("localhost:8948",opts...)
	if err != nil {
		log.Fatal(err)
		return
	}

	helloClient2 := pb.NewHelloClient(conn2)
	rsp, err := helloClient2.SayHello(context.TODO(), &emptypb.Empty{})
	if err != nil {
		log.Fatal(err)
	}

	log.Printf("sayhello rsp: %v", rsp)
}