为了账号安全,请及时绑定邮箱和手机立即绑定

使用火库身份验证从飞镖调用谷歌云运行gRPC:由未知颁发机构签名的证书

使用火库身份验证从飞镖调用谷歌云运行gRPC:由未知颁发机构签名的证书

Go
江户川乱折腾 2022-10-04 19:58:11
服务器我使用 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"]


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号