Не удается обменять AccessToken из Google API внутри контейнера Docker - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть веб-приложение, написанное на 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
}

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Проблема вызвана не Go, а альпийским изображением.

Альпийское изображение по умолчанию не имеет сертификатов, поэтому приложение не может позвонить по адресу https (в данном случае https://accounts.google.com/o/oauth2/token).

ИсправитьЭта проблема, установите 2 пакета openssl и ca-certificates. Пример в Dockerfile:

apk add --no-cache ca-certificates openssl
0 голосов
/ 15 сентября 2018

Вам потребуется добавить сертификат CA выдающего Google в хранилище доверенных сертификатов образа докера.

Сертификат Google CA - это https://pki.google.com/GIAG2.crt.

Более подробную информацию о сертификате можно найти по здесь

Тогда в Dockerfile вам нужно будет сделать что-то вроде этого

cp GIAG2.crt /usr/local/share/ca-certificates/GIAG2.crt
update-ca-certificates
...