Node.js 401从Webapp集成Hyperledger Composer REST API需要授权 介绍

Node.js 401从Webapp集成Hyperledger Composer REST API需要授权 介绍,node.js,hyperledger,passport.js,hyperledger-composer,passport-github2,Node.js,Hyperledger,Passport.js,Hyperledger Composer,Passport Github2,通过以下链接,我有一个hyperledger环境在安全模式下运行 如果我按照文档中的指定进行身份验证,它就可以正常工作http://mydomain:3000/auth/github 直接从浏览器访问Rest API,然后从http://mydomain:3000/explorer 并可授权作为各种参与者,即,发布身份并将其添加到钱包中,每次将一个设置为默认值,并且可以根据.acl文件查看资产 问题 但是,当我开始从web应用程序而不是直接从浏览器集成RESTAPI时,我开始面临问题。作为我网络

通过以下链接,我有一个hyperledger环境在安全模式下运行

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

问题 但是,当我开始从web应用程序而不是直接从浏览器集成RESTAPI时,我开始面临问题。作为我网络应用的第一步,我打电话给http://mydomain:3000/auth/github 进行身份验证,然后开始调用其他API事务/列表等,但我总是得到 错误401:“需要授权”

我试过的 将我的web应用程序URL作为hyperledger的env变量中的“重定向URL”。以及在成功的身份验证调用时http://mydomain:3000/auth/github 它成功重定向到my webapp主页,但随后从web app访问Rest API时再次抛出“需要授权”错误

环境变量如下所示:

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": "/"
 }
}'
在我的web应用程序中加入passport-github2机制,即,在成功登录到我的web应用程序后,向github的oauth注册我的应用程序;叫http://mydomain:3000/auth/github 对区块链进行身份验证,但结果也不一样

我有几个问题:

从另一个web应用程序调用安全hyperledger Rest API是否可行? 如果是,怎么做?我在hyperledger composer文档中找不到这些信息。
我已经试了一个星期了,但没有答案。任何帮助都将不胜感激。如果有什么不清楚的地方,请告诉我。谢谢。

我在下面链接的一个现有hyperledger github问题上评论了这个问题&我想与大家分享解决这个问题的解决方案。

解决方案:如用户sstone1所述

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

通过角度:

通过JQuery AJAX:

this.http.get('http://mydomain:3000/api/MyAsset', { withCredentials: true })
  $.ajax({
    url: 'http://mydomain:3000/api/MyAsset',
    xhrFields: {
      withCredentials: true
    },
    headers: {
      ...
    }
  })