Требуется авторизация 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 аутентифицироваться в блокчейне, и это тоже не сработало.

У меня есть несколько вопросов:

  1. Реально ли вызывать API-интерфейсы Rest Restredger из другого веб-приложения?
  2. Если да, то как это сделать? Я не нахожу эту информацию в документации композитора 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: {
      ...
    }
  })
Другие вопросы по тегам