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

Тонкая настройка платформы: настройка авторизации для 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.