我有一个用Go编写的Web应用程序,使用oauth2(程序包golang.org/x/oauth2)通过Google登录用户(请按照本教程https://developers.google.com/identity/sign- in/web/server-side-flow进行操作)。
golang.org/x/oauth2
当我在本地测试应用程序时,它工作正常,但是当我部署应用程序并在Docker容器中alpine:latest运行(基于,运行二进制文件)时,它会出现错误: Post https://accounts.google.com/o/oauth2/token: x509: certificate signed by unknown authority
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个软件包openssl和ca-certificates。Dockerfile中的示例:
openssl
ca-certificates
apk add --no-cache ca-certificates openssl