Требуется авторизация 401 для интеграции REST API Hyperledger Composer из Webapp
Вступление
У меня есть гиперведжер env, работающий в безопасном режиме по этой ссылке https://hyperledger.github.io/composer/integrating/enabling-rest-authentication.html
и он работает нормально, если я аутентифицируюсь, как указано в документе (удар http://mydomain:3000/auth/github
непосредственно из браузера), а затем получить доступ к Rest API из http://mydomain:3000/explorer
и может авторизоваться как различные участники (т. е. выдавать удостоверения и добавлять их в кошелек и устанавливать их по умолчанию за один раз) и видеть активы согласно файлу.acl.
вопрос
Но я столкнулся с проблемами, когда начал интегрировать API Rest из своего веб-приложения, а не напрямую из браузера. В качестве первого шага от моего веб-приложения я назвал http://mydomain:3000/auth/github
аутентификации и затем начал вызывать другие API (транзакции / список и т. д.), но я всегда получаю сообщение обошибке 401: "Требуется авторизация"
Что я пробовал
Укажите URL-адрес моего веб-приложения в качестве "URL-адреса перенаправления" в переменной env для hyperledger. И при успешной аутентификации (звонит http://mydomain:3000/auth/github
) он успешно перенаправлен на домашнюю страницу моего веб-приложения, но после этого при доступе к API Rest (из веб-приложения) снова возникает ошибка "Требуется авторизация".
Среда изменчива, как показано ниже:
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
механизм в моем веб-приложении (т.е. зарегистрировал мое приложение с oauth github) и после успешного входа в мое веб-приложение; называется http://mydomain:3000/auth/github
аутентифицироваться в блокчейне, и это тоже не сработало.
У меня есть несколько вопросов:
- Реально ли вызывать API-интерфейсы Rest Restredger из другого веб-приложения?
- Если да, то как это сделать? Я не нахожу эту информацию в документации композитора hyperledger.
Пытаюсь уже неделю и не имею ответов. Любая помощь будет принята с благодарностью. Пожалуйста, дайте мне знать, если что-то неясно. Благодарю.
1 ответ
Я прокомментировал эту проблему по одной из существующих проблем github hyperledger (ссылка ниже), и я хочу поделиться решением, которое решило эту проблему для меня. https://github.com/hyperledger/composer/issues/142
Решение: как указано пользователем sstone1
Поскольку REST-сервер находится на другом номере порта вашего веб-приложения, вам необходимо указать дополнительную опцию вашему HTTP-клиенту для передачи файлов cookie на REST-сервер. Используя клиент Angular HTTP, вы добавляете
withCredentials
флаг, например:
через Angular:
this.http.get('http://mydomain:3000/api/MyAsset', { withCredentials: true })
через JQuery AJAX:
$.ajax({
url: 'http://mydomain:3000/api/MyAsset',
xhrFields: {
withCredentials: true
},
headers: {
...
}
})