猿问

无法从 Docker 容器内的 Google API 交换 AccessToken

我有一个用 Go 编写的网络应用程序,使用 oauth2(包golang.org/x/oauth2)通过 Google 登录用户(按照本教程https://developers.google.com/identity/sign-in/web/server-side-flow)。


当我在本地测试应用程序时,它工作正常但是当我部署应用程序并在 Docker 容器中运行时(基于alpine:latest,运行二进制文件),它有一个错误: Post https://accounts.google.com/o/oauth2/token: x509: certificate signed by unknown authority


这是我交换 accessToken 的代码:


ctx = context.Background()


config := &oauth2.Config{

    ClientID:     config.GoogleClientId,

    ClientSecret: config.GoogleClientSecret,

    RedirectURL:  config.GoogleLoginRedirectUrl,

    Endpoint:     google.Endpoint,

    Scopes:       []string{"email", "profile"},

}


accessToken, err := config.Exchange(ctx, req.Code)

if err != nil {

    log.Println(err.Error())   // Error here

}


慕雪6442864
浏览 120回答 2
2回答

手掌心

问题不是由 Go 引起的,而是 Alpine 图像引起的。默认的 Alpine 图像没有证书,因此应用程序无法调用 https 地址(要解决此问题,请安装 2 个软件包openssl和ca-certificates. Dockerfile 中的示例:apk add --no-cache ca-certificates openssl

哈士奇WWW

您需要将 Google Issuing CA 证书添加到 docker 映像的受信任证书存储中。然后在 Dockerfile 中,你需要做这样的事情cp GIAG2.crt /usr/local/share/ca-certificates/GIAG2.crt update-ca-certificates
随时随地看视频慕课网APP

相关分类

Go
我要回答