Доступ к информации о области OAuth с помощью composer-rest-server - PullRequest
0 голосов
/ 03 июля 2018

Я успешно построил сеть и могу развернуть ее на локальном экземпляре Hyperledger Fabric. Используя Hyperledger Composer docs здесь , у меня есть два экземпляра composer-rest-server running - один с включенной многопользовательской аутентификацией и один без, и с этой точки зрения все работает отлично.

Для сервера REST с включенной многопользовательской аутентификацией я успешно настроил провайдеров для passport-github и другого для passport-google-oauth, используя следующее значение для COMPOSER_PROVIDERS:

export COMPOSER_PROVIDERS='{
  "github": {
    "provider": "github",
    "module": "passport-github",
    "clientID": "<client_id>",
    "clientSecret": "<client_secret>",
    "scope": "read:user,user:email",
    "authPath": "/auth/github",
    "callbackURL": "/auth/github/callback",
    "successRedirect": "http://localhost:4200/callback",
    "failureRedirect": "http://localhost:4200/login-failed"
  },
  "google": {
    "provider": "google",
    "module": "passport-google-oauth",
    "strategy": "OAuth2Strategy",
    "clientID": "<client_id>",
    "clientSecret": "<client_secret>",
    "scope": [
      "https://www.googleapis.com/auth/plus.login",
      "https://www.googleapis.com/auth/userinfo.email",
      "https://www.googleapis.com/auth/userinfo.profile"
    ],
    "authPath": "/auth/google",
    "callbackURL": "/auth/google/callback",
    "successRedirect": "http://localhost:4200/callback",
    "failureRedirect": "http://localhost:4200/login-failed"
  }
}'

Как видите, я указал переменную scope в обоих провайдерах, чтобы попытаться получить электронную почту + имя пользователя из профиля пользователя. Эта информация успешно извлекается Loopback в процессе аутентификации Passport, и это здорово! Но затем composer-rest-server использует defaultCallback Loopback для процесса аутентификации, что означает, что Loopback отбрасывает всю эту информацию и выбирает только два файла cookie - access_token и userId. Вся информация scope тогда, очевидно, отбрасывается и теряется навсегда.

Я могу взломать код composer-rest-server в моих node_modules /, чтобы использовать свой собственный обратный вызов аутентификации Passport для сохранения этих данных области для дальнейшего использования, но есть ли рекомендуемый способ?

Спасибо!


Мое текущее «решение» - добавить

let cb = require('../lib/custom-callback')(s, c);
c.customCallback = cb.callback();

как раз перед

passportConfigurator.configureProvider(s, c);

внутри server.js в composer-rest-server. Затем я могу добавить свой собственный код обратного вызова в ../lib/custom-callback.js. Но эта функциональность, кажется, не доступна из коробки.

1 Ответ

0 голосов
/ 05 июля 2018

Как вы знаете, он использует платформу Loopback под крышками и его loopbackPassport.PassportConfigurator (и то, что установлено). Вы можете создать свой собственный REST-сервер (который по функциональности эквивалентен REST-серверу Composer) и настроить его по своему желанию https://hyperledger.github.io/composer/latest/integrating/customizing-the-rest-server - это создаст приложение Loopback 3. Поэтому рекомендуемый способ - сгенерировать REST-сервер и настроить его соответствующим образом.

...