0

介绍

通过以下链接https://hyperledger.github.io/composer/integrating/enabling-rest-authentication.html,我有一个以安全模式运行的超级账本环境

如果我按照文档中指定的方式进行身份验证(http://mydomain:3000/auth/github 直接从浏览器中点击),然后从 访问 Rest APIhttp://mydomain:3000/explorer并可以授权为各种参与者(即,颁发身份并将其添加到钱包并将其设置为默认值),它工作正常一次)并且可以根据 .acl 文件查看资产。

问题

但是当我开始从我的 Web 应用程序而不是直接从浏览器集成 Rest API 时,我开始遇到问题。作为我的网络应用程序的第一步,我调用了http://mydomain:3000/auth/github进行身份验证,然后开始调用其他 API(事务/列表等),但我总是得到 错误 401:'需要授权'

我试过的

在超级账本的 env 变量中将我的 Web 应用程序 URL 作为“重定向 URL”。在成功验证(调用http://mydomain:3000/auth/github)后,它成功重定向到我的 webapp 主页,但之后访问 Rest API(从 web 应用程序)再次引发“需要授权”错误。

环境变量如下:

export COMPOSER_PROVIDERS='{
 "github": {
  "provider": "github",
  "module": "passport-github",
  "clientID": "CLIENT_ID",
  "clientSecret": "CLIENT_SECRET",
  "authPath": "/auth/github",
  "callbackURL": "/auth/github/callback",
  "successRedirect": "http://localhost:8080/home.html",
  "failureRedirect": "/"
 }
}'

passport-github2在我的 Web 应用程序中加入机制(即,使用 github 的 oauth 注册我的应用程序)并成功登录我的 Web 应用程序;调用http://mydomain:3000/auth/github来对区块链进行身份验证,但它也没有成功。

我有几个问题:

  1. 从另一个 Web 应用程序调用安全的超级账本 Rest API 是否可行?
  2. 如果是,该怎么做?我在超级账本作曲家文档中找不到该信息。

已经尝试了一个星期,但没有答案。任何帮助将不胜感激。如果有任何不清楚的地方,请告诉我。谢谢。

4

1 回答 1

1

我在现有的超级账本 github 问题之一上评论了这个问题(下面的链接),我想分享为我解决这个问题的解决方案。 https://github.com/hyperledger/composer/issues/142

解决方案:如用户所述sstone1

由于 REST 服务器与您的 Web 应用程序位于不同的端口号上,因此您需要为 HTTP 客户端指定一个附加选项以将 cookie 传递给 REST 服务器。使用 Angular HTTP 客户端,您可以添加withCredentials标志,例如:

通过角:

this.http.get('http://mydomain:3000/api/MyAsset', { withCredentials: true })

通过 JQuery AJAX:

  $.ajax({
    url: 'http://mydomain:3000/api/MyAsset',
    xhrFields: {
      withCredentials: true
    },
    headers: {
      ...
    }
  })
于 2017-08-21T08:44:27.933 回答