API-интерфейс REST Workbench Azure Blockchain возвращает 204 Нет содержимого - PullRequest
0 голосов
/ 20 января 2019

Я создал и распространил проект рабочей среды blockchain. Я могу получить доступ к веб-сайту клиента Azure Blockchain Workbench, где я могу создавать контракты, выполнять действия и т. Д.

Я пытался разработать простую программу для использования REST API Azure Blockchain Workbench для взаимодействия с блокчейном с моим собственным приложением.

Перед вызовом любой API-функции я получаю токен аутентификации (надеюсь, он правильный, потому что я получаю значение для токена)

Если сейчас я попытаюсь вызвать функцию API «https://myblockchain -xyz-api.azurewebsites.net / api / v2 / users », то получу в результате список пользователей.

Однако, если теперь я попытаюсь вызвать любую другую функцию для приложений блокчейна, например "/ api / v2 / Applications", я получу код возврата 204 "Нет содержимого".

Если я попытаюсь вызвать, например, «/ api / v2 / Applications / 2 / workflows», я получу 404 «Не найдено»

После вызова API:

Dim MyOauthToken As String = 
Utilities.BlockchainAuthentication.GetAuthenticationToken().Result

Dim MyHttpClient As New HttpClient()
MyHttpClient.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", MyOauthToken)
'--------------------------------------------------------
'Force security protocol
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12
'---------------------------------------------------------
'Get list of applications
Dim MyServiceUriString As String = "https://myblockchain-xyz-api.azurewebsites.net/api/v2/users/applications"
Dim MyResponse As Task(Of HttpResponseMessage) = MyHttpClient.GetAsync(MyServiceUriString)
MyResponse.Wait()

Результатом функции «Приложения» является 204 «Нет содержимого» Если я делаю то же самое, вызывая «... / api / v2 / users», это работает, и я получаю всех пользователей.

Кто-нибудь может помочь?

Я пытался позвонить "../users/me", чтобы увидеть, что происходит, и я получил следующий результат (я не знаю, может ли это помочь):

{ "CurrentUser": { "идентификатор пользователя": 7, "ExternalId": "1r67sf88-5b49-47da-a27a-79g3gg345", "Имя": нулевой, "LastName": "", "EMAILADDRESS": нулевой, "userChainMappings": [{ "userChainMappingID": 5, "идентификатор пользователя": 7, "ConnectionID": 1, "chainIdentifier": "0x32cfcf169813364563456348c99b9", "chainBalance": нулевой}]}, "возможности": { "canUploadApplication": ложь, "canUploadContractCode" ложь "canModifyRoleAssignments": ложь, "canProvisionUser": ложные "canUpgradeWorkbench": ложные}}

1 Ответ

0 голосов
/ 30 апреля 2019

Проблема в том, что пользователь по умолчанию (созданный путем развертывания Azure Blockchain Workbench) в автономной БД не сопоставлен ни с каким приложением. Как обходной путь - вы всегда можете добавить это отображение вручную в БД, и после этого вы сможете получать приложения (и использовать контракты и т. Д.).

Что нужно сделать:

  1. Поиск внешнего идентификатора пользователя для приложения (веб-API), которое было подготовлено с помощью Azure Blockchain Workbench.

    • Перейдите в Azure Azcive Directory
    • Корпоративные приложения
    • Выберите все apss в выпадающем меню и нажмите Применить
    • Теперь вы можете увидеть что-то вроде Azure Blockchain Workbench blockchaintest-XXXXX
    • Выберите элемент, и вы получите external_id в адресной строке браузера (последний указатель в строке)
  2. Найти группу ресурсов для AZ BCW, которую вы создаете, и найти базу данных SQL

  3. Редактор пользовательских запросов (предварительный просмотр) для подключения к БД
  4. Найти идентификатор пользователя в dbo.User с external_id из шага 1
  5. Найти идентификатор приложения в dbo.Application
  6. Добавить новую запись в dbo.RoleAssignment с идентификатором пользователя с шага 4 и идентификатором приложения с шага 5

Теперь это должно работать

curl -H "Authorization: Bearer ${TOKEN}" -X GET 'https://blockchaintest-XXXXX-api.azurewebsites.net/api/v1/applications?isLatestVetsion=true' 
{"nextLink":"/api/v1/applications?skip=1","applications":[{"id":10,"version":"9.0","name":"CCCCC","description":"CCCCCCC","displayName":"CCCCCCCC","createdByUserId":2,"createdDtTm":"2019-04-30T05:13:40.87","enabled":true,"blobStorageURL":null,"isLatestVersion":null,"applicationRoles":null}]}
...