使用composer-rest-server访问OAuth范围信息

时间:2018-07-03 14:36:34

标签: hyperledger hyperledger-composer hyperledger-explorer

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

对于启用了多用户身份验证的REST服务器,我已经使用passport-github的以下值成功为passport-google-oauthCOMPOSER_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);

在composer-rest-server中的server.js内部。然后,我可以将自己的自定义回调代码放入../lib/custom-callback.js中。但是似乎无法立即使用此功能。

1 个答案:

答案 0 :(得分:1)

您知道,它在后台使用了Loopback框架及其loopbackPassport.PassportConfigurator(以及设置的内容)。您可以生成自己的自定义REST服务器(在功能上等效于Composer REST服务器)以按自己的意愿https://hyperledger.github.io/composer/latest/integrating/customizing-the-rest-server进行自定义-这将生成Loopback 3应用程序。因此,建议的方法是生成REST服务器并进行相应的自定义。