需要401 Authorization从Webapp

时间:2017-08-18 12:53:11

标签: node.js hyperledger passport.js hyperledger-composer passport-github2

简介

我按照此链接https://hyperledger.github.io/composer/integrating/enabling-rest-authentication.html

在安全模式下运行了超级赞成环境

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

问题

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

我尝试了什么

将我的网络应用程序网址作为'重定向网址'在超级边界的env变量中。成功进行身份验证(调用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机制(即使用github的oauth注册我的应用程序)并成功登录我的网络应用程序;调用http://mydomain:3000/auth/github来对区块链进行身份验证,但也没有问题。

我有几个问题:

  1. 从另一个Web应用程序调用安全超级聚合器Rest API是否可行?
  2. 如果是,怎么办?我在hyperledger作曲家文档中找不到这些信息。
  3. 现在已经尝试了一个星期并且没有答案。任何帮助将不胜感激。如果有任何不清楚的地方,请告诉我。感谢。

1 个答案:

答案 0 :(得分:1)

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

用户<?php // SQL Login $host = "localhost"; $user = "name"; $password = "password"; $db = "test_nico"; $mysqli = new mysqli($host, $user, $password, $db) or die (mysqli_error()); if (!$mysqli) { echo 'SQL Server nicht gefunden oder Zugangsdaten passen nicht!';}; $mysqli->query("SET NAMES 'utf8'"); if ($mysqli->connect_errno) { die("Verbindung fehlgeschlagen: " . $mysqli->connect_error); } // Tauschpartner ID $id = $_POST['id']; // Eingang $eingang_pgp = $_POST['eingang_pgp']; $eingang_pfp = $_POST['eingang_pfp']; $eingang_klt = $_POST['eingang_klt']; $eingang_halbe = $_POST['eingang_halbe']; $eingang_viertel = $_POST['eingang_viertel']; // Ausgang $ausgang_pgp = $_POST['ausgang_pgp']; $ausgang_pfp = $_POST['ausgang_pfp']; $ausgang_klt = $_POST['ausgang_klt']; $ausgang_halbe = $_POST['ausgang_halbe']; $ausgang_viertel = $_POST['ausgang_viertel']; // Query $search = "SELECT * FROM tauschpartner"; $result = mysqli_query($mysqli, $search); while($row = mysqli_fetch_array($result)) { $tid = $row['id']; $firma_array[$tid] = $row['firma']; $pfp_array[$tid] = $row['pfp']; $pgp_array[$tid] = $row['pgp']; $klt_array[$tid] = $row['klt']; $halbe_array[$tid] = $row['halbe']; $viertel_array[$tid] = $row['viertel']; } // Bestand $pgp_bestand = $pgp_array[$id]; $pfp_bestand = $pfp_array[$id]; $klt_bestand = $klt_array[$id]; $halbe_bestand = $halbe_array[$id]; $viertel_bestand = $viertel_array[$id]; // Berechnung $pgp = $pgp_bestand + $eingang_pgp - $ausgang_pgp; $pfp = $pfp_bestand + $eingang_pfp - $ausgang_pfp; $klt = $klt_bestand + $eingang_klt - $ausgang_klt; $halbe = $halbe_bestand + $eingang_halbe - $ausgang_halbe; $viertel = $viertel_bestand + $eingang_viertel - $ausgang_viertel; // SQL Query $sql_query = "UPDATE tauschpartner SET pfp = $pfp, pgp = $pgp, klt = $klt, halbe = $halbe, viertel = $viertel WHERE id = $id"; $sql = mysqli_query($mysqli, $sql_query); echo "ID: ".$id."\n"; echo "eingang_pgp: ".$eingang_pgp."\n"; echo "eingang_pfp: ".$eingang_pfp."\n"; echo "eingang_klt: ".$eingang_klt."\n"; echo "eingang_halbe: ".$eingang_halbe."\n"; echo "eingang_viertel: ".$eingang_viertel."\n"; echo "\n"; echo "ausgang_pgp: ".$ausgang_pgp."\n"; echo "ausgang_pfp: ".$ausgang_pfp."\n"; echo "ausgang_klt: ".$ausgang_klt."\n"; echo "ausgang_halbe: ".$ausgang_halbe."\n"; echo "ausgang_viertel: ".$ausgang_viertel."\n"; echo "\n"; echo "Bestand pgp: ".$pgp."\n"; echo "Bestand pfp: ".$pfp."\n"; echo "Bestand klt: ".$klt."\n"; echo "Bestand halbe: ".$halbe."\n"; echo "Bestand viertel: ".$viertel."\n"; echo "\n"; $sql_query_all = "SELECT SUM(pgp) AS pgp_all, SUM(pfp) AS pfp_all, SUM(klt) AS klt_all, SUM(halbe) AS halbe_all, SUM(viertel) AS viertel_all FROM tauschpartner WHERE ID != 1"; $sql = mysqli_query($mysqli, $sql_query_all); while($row_all = mysqli_fetch_array($sql)) { $pgp_bestand_all = $row['pgp_all']; $pfp_bestand_all = $row['pfp_all']; $klt_bestand_all = $row['klt_all']; $halbe_bestand_all = $row['halbe_all']; $viertel_bestand_all = $row['viertel_all']; }; $sql_query_update_gd_bestand = "INSERT INTO tauschpartner SET pgp = $pgp_bestand_all, pfp = $pfp_bestand_all, klt = $klt_bestand, halbe = $halbe_bestand_all, viertel = $viertel_bestand_all WHERE id =1"; $sql = mysqli_query($mysqli, $sql_query_update_gd_bestand); echo $row['viertel_all']."\n"; echo "GD Bestand pgp: ".$pgp_bestand_all."\n"; echo "GD Bestand pfp: ".$pfp_bestand_all."\n"; echo "GD Bestand klt: ".$klt_bestand_all."\n"; echo "GD Bestand halbe: ".$halbe_bestand_all."\n"; echo "GD Bestand viertel: ".$viertel_bestand_all; echo "\n"; ?>

提及的

解决方案

  

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

通过Angular:

withCredentials

通过JQuery AJAX:

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