Я следую руководству Использование Google OAUTH2.0 с сервером REST (https://hyperledger.github.io/composer/latest/tutorials/google_oauth2_rest). После успешного входа в мою учетную запись Google я получаю эту ошибку в браузере:
{
"error": {
"statusCode": 500,
"name": "InternalOAuthError",
"message": "Failed to obtain access token",
"oauthError": {
"errno": "ENOTFOUND",
"code": "ENOTFOUND",
"syscall": "getaddrinfo",
"hostname": "accounts.google.com",
"host": "accounts.google.com",
"port": 443
},
"stack": "InternalOAuthError: Failed to obtain access token\n at Strategy.OAuth2Strategy._createOAuthError (/home/composer/node_modules/passport-oauth2/lib/strategy.js:379:17)\n at /home/composer/node_modules/passport-oauth2/lib/strategy.js:166:45\n at /home/composer/node_modules/oauth/lib/oauth2.js:191:18\n at ClientRequest.<anonymous> (/home/composer/node_modules/oauth/lib/oauth2.js:162:5)\n at emitOne (events.js:116:13)\n at ClientRequest.emit (events.js:211:7)\n at TLSSocket.socketErrorListener (_http_client.js:387:9)\n at emitOne (events.js:116:13)\n at TLSSocket.emit (events.js:211:7)\n at emitErrorNT (internal/streams/destroy.js:66:8)\n at args.(anonymous function) (/home/composer/.npm-global/lib/node_modules/pm2/node_modules/event-loop-inspector/index.js:138:29)\n at _combinedTickCallback (internal/process/next_tick.js:139:11)\n at process._tickDomainCallback (internal/process/next_tick.js:219:9)"
}
}
Я за корпоративным прокси.Итак, я подозреваю, что это проблема, но я не уверен.
Следуя инструкциям руководства, я отредактировал файл Dockerfile для добавления конфигурации прокси-сервера npm (ip и порт с правильными данными):
ОТ сервера гиперссылки / composer-rest-RUN RUN Конфигурационный набор npm прокси http://ip:port && Конфигурационный набор npm https-proxy http://ip:port && \ npm install --production loopback-connector-mongodb passport-google-oauth2 запрос https-proxy-agent && \ npm очистка кэша --force && \ ln -s node_modules .node_modules
Кроме того, я добавил запрос и https-proxy-agent модулидля реализации обходного решения, поясняющего здесь: Используйте Passport.js за корпоративным брандмауэром для стратегии Facebook , но безуспешно.
Я построил сервер композиторов-отдыхающих с образами Docker следующим образом:
docker build -t myorg/composer-rest-server --build-arg http_proxy=http://ip:port --build-arg https_proxy=http://ip:port .
Когда я запустил контейнер Docker, это был журнал:
[2018-09-28T10: 48: 18.240Z] Журнал PM2: запуск в режиме без демона [2018-09-28T10: 48: 18.318Z] PM2 log: запуск последовательности выполнения в режиме -fork для имени приложения: идентификатор composer-rest-server: 0 [2018-09-28T10: 48: 18.325Z] Журнал PM2: имя приложения: идентификатор composer-rest-server: 0 онлайн ПРЕДУПРЕЖДЕНИЕ: Значение NODE_APP_INSTANCE, равное 0, не соответствует ни одному из имен файлов конфигурации экземпляра.ВНИМАНИЕ: См. https://github.com/lorenwest/node-config/wiki/Strict-Mode Обнаружение типов из определения бизнес-сети ... (узел: 15) DeprecationWarning: текущий анализатор строки URL устарел и будет удален в будущей версии.Чтобы использовать новый синтаксический анализатор, передайте опцию {useNewUrlParser: true} в MongoClient.connect.Обнаружение возвращаемых транзакций .. Обнаруженные типы из определения бизнес-сети Создание схем для всех типов в определении бизнес-сети ... Сгенерированные схемы для всех типов в определении бизнес-сети Добавление схем для всех типов в Loopback ... Добавлены схемы для всех типов в LoopbackВеб-сервер прослушивает: http://localhost:3000 Просмотрите API REST на http://localhost:3000/explorer
И после входа в мою учетную запись Google это был журнал:
Неизвестное ошибка запроса GET /auth/google/callback?code=4%2FbAC3w3UnnALN4kKQD8RdjfC_wrXJeFAojIHKOANISGWYn-zvIzTeO24P96T_SaJDhVBPcbdqrmLxUyv9IajeYrg&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.me+https%3A%2F%2Fwww.googleapis.com% 2Fauth% 2Fplus.profile.agerange.read + HTTPS% 3A% 2F% 2Fwww.googleapis.com% 2Fauth% 2Fplus.profile.language.read + HTTPS% 3A% 2F% 2Fwww.googleapis.com% 2Fauth% 2Fuserinfo.profile: InternalOAuthError: Не удалось получить токен доступа в Strategy.OAuth2Strategy._createOAuthError (/ home / composer / node_modules /passport-oauth2 / lib / strategy.js: 379: 17) в /home/composer/node_modules/passport-oauth2/lib/strategy.js:166:45 в /home/composer/node_modules/oauth/lib/oauth2.js: 191: 18 по требованию клиента.(/home/composer/node_modules/oauth/lib/oauth2.js:162:5) в emitOne (events.js: 116: 13) в ClientRequest.emit (events.js: 211: 7) в TLSSocket.socketErrorListener (_http_client.js: 387: 9) в emitOne (events.js: 116: 13) в TLSSocket.emit (events.js: 211: 7) в emitErrorNT (внутренний / streams / destroy.js: 66: 8) в аргументах. (анонимная функция) (/home/composer/.npm-global/lib/node_modules/pm2/node_modules/event-loop-inspector/index.js:138:29) в _combinedTickCallback (internal / process / next_tick.js: 139: 11) at process._tickDomainCallback (internal / process / next_tick.js: 219: 9)
И это переменная COMPOSER_PROVIDERS с правильными значениями clientID и clientSecret:
COMPOSER_PROVIDERS='{
"google": {
"provider": "google",
"module": "passport-google-oauth2",
"clientID": "REPLACE_WITH_CLIENT_ID",
"clientSecret": "REPLACE_WITH_CLIENT_SECRET",
"authPath": "/auth/google",
"callbackURL": "/auth/google/callback",
"scope": "https://www.googleapis.com/auth/plus.login",
"successRedirect": "/",
"failureRedirect": "/"
}
Кто-нибудь может сказать мне, где проблема?
Спасибо.
PD: Извините за этот кирпич!