小编典典

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

go

我有一个用Go编写的Web应用程序,使用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
}

阅读 264

收藏
2020-07-02

共1个答案

小编典典

问题不是由Go引起的,而是Alpine image。

默认的Alpine图片没有证书,因此该应用无法调用https地址(这种情况为https://accounts.google.com/o/oauth2/token)。

要解决此问题,请安装2个软件包opensslca-certificates。Dockerfile中的示例:

apk add --no-cache ca-certificates openssl
2020-07-02