当前位置: 首页 > 面试题库 >

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

薄腾
2023-03-14
问题内容

我有一个用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
}

问题答案:

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

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

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

apk add --no-cache ca-certificates openssl


 类似资料:
  • 要运行测试文件,Flask应用程序需要连接到Redis。我尝试将这些URL用于redis主机,如localhost:6379,redis:6379,0.0.0.0:6379,但都没有用。他们都告诉我连接错误或连接拒绝。 知道如何从jenkins docker容器中连接到redis吗?

  • 我在Amazon linux ec2上安装了dd-agent。如果我直接在主机上运行我的python脚本(我使用了名为"dogstatsd-python"的SDK),所有指标都可以发送到datadog(我登录到datadoghq.com并在那里看到了指标)。脚本类似: 然而,我启动了一个docker容器,并从容器内部运行相同的脚本: '172.14.0.1'是主机的IP,它是用命令提取的 根本没有

  • 我正在尝试从另一个码头工人容器连接到 kafka docker 容器。但它没有连接。 为了运行kafka和zookeeper,我使用了docker compose文件: 容器docker compose 17138956372294708100 _ kafkatest . producer _ 1和docker compose 17138956372294708100 _ kafkatest .

  • 我可以对Docker API进行cUrl调用,但是如果我从容器(docker-comals)运行相同的脚本,我就无法到达任何API终结点。 我的请求如下: 原因可能是使用了localhost,但我现在还找不到解决方案。有什么建议吗? 编辑:下面是我正在使用的堆栈(Api平台)的简要摘要https://api-platform.com/).每个容器都连接到“api_默认”网桥网络: 基于php=Sy

  • 我正在写一个go应用程序,它被dockerized在两个容器:db和app。 当启动容器'docker-compose up‘时,我看到消息:dial tcp:lookup dbpgsql on 127.0.0.11:53:没有这样的主机