服務器我使用 gRPC 中間件來檢查流中的火庫身份驗證令牌:package main...func main() { port := os.Getenv("PORT") if port == "" { port = "8080" } grpcEndpoint := fmt.Sprintf(":%s", port) log.Printf("gRPC endpoint [%s]", grpcEndpoint) logger, err := zap.NewProduction() if err != nil { log.Fatalf("Failed to init logger: %v", err) } defer logger.Sync() // flushes buffer, if any grpcServer := grpc.NewServer( grpc.StreamInterceptor(grpc_middleware.ChainStreamServer( grpc_ctxtags.StreamServerInterceptor(), grpc_zap.StreamServerInterceptor(logger), grpc_auth.StreamServerInterceptor(server.AuthFunc))), ) ctx := context.Background() fb, err := firebase.NewApp(ctx, &firebase.Config{ ProjectID: "my-firebase-project", }) server.App = fb if err != nil { panic(fmt.Sprintf("Failed to init firebase: %v", err)) } pb.RegisterMyAwesomeServer(grpcServer, server.NewServer()) listen, err := net.Listen("tcp", grpcEndpoint) if err != nil { log.Fatal(err) } log.Printf("Starting: gRPC Listener [%s]\n", grpcEndpoint) log.Fatal(grpcServer.Serve(listen))}package server...func parseToken(ctx context.Context, token string) (*auth.Token, error) { client, err := App.Auth(ctx) if err != nil { return nil, err } nt, err := client.VerifyIDToken(ctx, token) if err != nil { return nil, err } return nt, nil}type AuthToken stringfunc AuthFunc(ctx context.Context) (context.Context, error) { token, err := grpc_auth.AuthFromMD(ctx, "bearer") if err != nil { return nil, err } tokenInfo, err := parseToken(ctx, token) if err != nil { return nil, status.Errorf(codes.Unauthenticated, "invalid auth token: %v", err) } grpc_ctxtags.Extract(ctx).Set("auth.uid", tokenInfo.UID) newCtx := context.WithValue(ctx, AuthToken("tokenInfo"), tokenInfo) return newCtx, nil}
1 回答

青春有我
TA貢獻1784條經驗 獲得超8個贊
實際上,后端缺少證書...
通過使用以下方法解決:
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
在泊塢窗文件中
FROM golang as build
WORKDIR /all
COPY . .
# Build static binary
RUN CGO_ENABLED=0 GOOS=linux \
go build -a -installsuffix cgo \
-o /go/bin/server \
cmd/main/main.go
FROM scratch
COPY --from=build /go/bin/server /server
COPY --from=build /all/config.yaml /config.yaml
COPY --from=build /all/svc.dev.json /svc.dev.json
### THIS SOLVED
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
###
ENV GOOGLE_APPLICATION_CREDENTIALS /svc.dev.json
ENTRYPOINT ["/server", "./config.yaml"]
- 1 回答
- 0 關注
- 86 瀏覽
添加回答
舉報
0/150
提交
取消