1

我已经成功构建了一个网络,并且可以将其部署到 Hyperledger Fabric 的本地实例。使用此处的 Hyperledger Composer 文档,我运行了两个 composer-rest-server 实例——一个启用了多用户身份验证,一个没有启用,从这个角度来看,一切都很好。

对于启用了多用户身份验证的 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在两个提供商中都指定了一个变量来尝试检索用户配置文件的电子邮件+用户名。在 Passport 身份验证过程中,Loopback 已成功检索到此信息,这太棒了!但是随后 composer-rest-server 使用 Loopback 的 defaultCallback 来进行身份验证过程,这意味着 Loopback 会丢弃所有这些信息并选择仅设置两个 cookie -access_tokenuserId. 然后,所有scope信息显然都被丢弃并永远丢失。

我可以破解我的 node_modules/ 中的 composer-rest-server 代码,以使用我自己的自定义 Passport 身份验证回调来保存此范围数据以供以后使用,但是有推荐的方法吗?

谢谢!


我目前的“解决方案”是添加

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

就在之前

passportConfigurator.configureProvider(s, c);

server.jscomposer-rest-server 里面。然后我可以将我自己的自定义回调代码放入../lib/custom-callback.js. 但是这个功能似乎不是开箱即用的。

4

1 回答 1

1

如您所知,它在幕后使用了 Loopback 框架,以及它的 loopbackPassport.PassportConfigurator(以及设置的内容)。您可以生成自己的自定义 REST 服务器(在功能上相当于 Composer REST 服务器)以根据需要进行自定义https://hyperledger.github.io/composer/latest/integrating/customizing-the-rest-server - 这将生成 Loopback 3 应用程序。所以推荐的方法是生成 REST 服务器并进行相应的定制。

于 2018-07-05T09:19:35.783 回答