Установка и использование платформы

Тонкая настройка платформы: настройка авторизации для gRPC и REST API

Авторизация необходима для обеспечения доступа к gRPC и REST API инструментам ноды.

Блокчейн платформа Waves Enterprise поддерживает два типа авторизации для gRPC и REST API:

  • по хэшу ключевой строки api-key;

  • по JWT-токену (oAuth 2 авторизация).

Внимание

Авторизация по хэшу api-key является простым средством доступа к ноде, однако уровень безопасности этого метода авторизации сравнительно низок. Злоумышленник может получить доступ к ноде в случае попадания к нему строки api-key. Если вы хотите повысить уровень безопасности в вашей сети, рекомендуем воспользоваться авторизацией по JWT-токену через сервис авторизации.

Для настройки авторизации предусмотрена секция auth конфигурационного файла ноды.

Подсказка

Интерфейсы REST и gRPC API используют одинаковые значения api-key для авторизации по ключевой строке и public-key для авторизации по JWT-токену.

type = "api-key"

Авторизация по хэшу ключевой строки api-key используется в ноде по умолчанию. При выборе метода авторизации по хэшу ключевой строки api-key секция auth содержит следующие параметры:

auth {
  type = "api-key"

  # Hash of API key string
  api-key-hash = "G3PZAsY6EA8esgpKxB2UYTQJZJPzc14gLnNbm2xvcDf6"

  # Hash of API key string for PrivacyApi routes
  privacy-api-key-hash = "G3PZAsY6EA8esgpKxB2UYTQJZJPzc14gLnNbm2xvcDf6"

  # Hash of API key string for Сonfidential Smart Contracts API
  confidential-contracts-api-key-hash = "G3PZAsY6EA8esgpKxB2UYTQJZJPzc14gLnNbm2xvcDf6"
}

Для заполнения этих параметров вам потребуется утилита ApiKeyHash из пакета generator-x.x.x.jar, который вы можете скачать из официального репозитория Waves Enterprise в GitHub, выбрав используемую вами версию платформы.

Поместите этот файл в корневую папку платформы, а также создайте файл api-key-hash.conf:

apikeyhash-generator {
  crypto {
    type = GOST
    pki {
        mode = ON
        required-oids = ["1.2.3.4.5.6.7.8.9.10.11"]
    }
  }
  api-key = "some string for api-key"
  file = ${user.home}"/apikeyhash.out"
}

В этом файле в параметре api-key введите строку, которую вы хотите хэшировать и использовать для авторизации.

Параметр file позволяет указать имя файла, в который будет сохранён хэш. Параметр является опциональным. Если он не указан, то хэш выводится в консоль.

Примечание

Поле waves-crypto со значениями yes и no по-прежнему поддерживается, но в следующих версиях платформы планируется отказаться от его использования. Вместо него используйте поле type в разделе crypto.

Готовый файл api-key-hash.conf введите в качестве аргумента при запуске утилиты ApiKeyHash пакета generator:

java -jar generator-x.x.x.jar ApiKeyHash api-key-hash.conf

Пример вывода:

Api key: some string for api-key
Api key hash: G3PZAsY6EA8esgpKxB2UYTQJZJPzc14gLnNbm2xvcDf6

2021-02-11 16:31:21,586 INFO  [main] c.w.g.ApiKeyHashGenerator$ - Generator done

Полученное значение Api key hash укажите в параметрах api-key-hash, privacy-api-key-hash и confidential-contracts-api-key-hash в секции auth конфигурационного файла ноды, как указано выше.

type = "oauth2"

При выборе авторизации по JWT-токену секция auth конфигурационного файла ноды выглядит следующим образом:

auth {
  type: "oauth2"
  public-key: "AuthorizationServicePublicKeyInBase64"
}

Публичный ключ для oAuth генерируется при первичном развертывании ноды. Он находится в файле ./auth-service-keys/jwtRS256.key.pub.

Скопируйте строку, находящуюся между -----BEGIN PUBLIC KEY----- и -----END PUBLIC KEY----- и вставьте ее в качестве параметра public-key секции auth конфигурационного файла ноды.

Роли для авторизации через oAuth2

Ряд методов REST API и методов gRPC API могут вызывать только пользователи с определенными ролями авторизации.

При регистрации нового пользователя в Клиенте Waves Enterprise пользователю присваивается роль user. В дальнейшем администратор сервиса авторизации может изменять список присвоенных пользователю ролей.

Роль пользователя зашифрована в JWT-токене.

В таблицах ниже указаны методы и необходимые для их вызова роли, которые используются в блокчейн-сети Waves Enterprise Mainnet.

Список REST методов и ролей, имеющих к ним доступ, в Mainnet

Группа REST методов

REST метод

Без ролей

user

admin

privacy

ConfidentialContractUser

activation

*

*

*

*

addresses

*

*

*

*

alias

*

*

*

*

anchoring

*

*

*

*

assets

*

*

*

*

blocks

*

*

*

*

consensus

*

*

*

*

метод /consensus/algo недоступен для роли user

*

contracts

*

*

*

*

confidential-contracts

*

*

crypto

*

*

*

*

debug

/debug/validate

*

*

*

*

/debug/blocks/{howMany}

*

/debug/cleanState

*

/debug/configInfo

*

/debug/createGrpcAuth

*

/debug/freeze

*

/debug/historyInfo

*

/debug/info

*

/debug/minerInfo

*

/debug/portfolios/{address}

*

/debug/print

*

/debug/rollback

*

/debug/rollback-to/{signature}

*

/debug/state

*

/debug/stateWE/{height}

*

/debug/threadDump

*

/debug/utx-rebroadcast

*

leasing

*

*

*

*

node

/node/status

*

*

*

*

*

/node/version

*

*

*

*

*

/node/healthcheck

*

*

*

*

*

/node/owner

*

*

*

*

/node/config

*

*

*

*

get /node/logging

*

*

*

*

get /node/metrics

*

*

*

*

/node/stop

*

post /node/logging

*

post /node/metrics

*

peers

/peers/all

*

*

*

*

/peers/connected

*

*

*

*

/peers/suspended

*

*

*

*

/peers/allowedNodes

*

/peers/connect

*

/peers/hostname/{address}

*

permissions

*

*

*

*

privacy

/privacy/{policyId}/recipients

*

*

*

*

/privacy/{policyId}/owners

*

*

*

*

/privacy/{policyId}/hashes

*

*

*

*

/privacy/{policyId}/transactions

*

*

*

*

/privacy/{policyId} /getData/{policyItemHash}

*

/privacy/{policyId} /getLargeData/{policyItemHash}

*

/privacy/{policyId} /getInfo/{policyItemHash}

*

/privacy/getInfos

*

/privacy/sendData

*

/privacy/sendDataV2

*

/privacy/sendLargeData

*

/privacy/forceSync

*

transactions

*

*

*

*

snapshot

/snapshot/status

*

*

*

*

/snapshot/genesisConfig

*

*

*

*

/snapshot/swapState

*

utils

*

*

*

*

Список gRPC методов и ролей, имеющих к ним доступ, в Mainnet

gRPC сервис

gRPC метод

Без ролей

user

admin

privacy

ConfidentialContractUser

TransactionPublicService

grpc-tx

*

*

*

*

UtxInfo

*

*

*

*

*

TransactionInfo

*

*

*

*

BlockchainEventsService

SubscribeOn

*

*

*

*

PrivacyEventsService

SubscribeOn

*

*

*

*

PrivacyPublicService

GetPolicyItemData

*

GetPolicyItemInfo

*

PolicyItemDataExists

*

SendData

*

ContractStatusService

ContractExecutionStatuses

*

*

*

*

ContractsExecutionEvents

*

*

*

*

NodeInfoService

NodeConfig

*

*

*

*

*

ContractPublicService

ConfidentialCall

*

Смотрите также