我按照此链接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
来对区块链进行身份验证,但也没有问题。
我有几个问题:
现在已经尝试了一个星期并且没有答案。任何帮助将不胜感激。如果有任何不清楚的地方,请告诉我。感谢。
答案 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 })