Настройка авторизации и REST API и gRPC интерфейсов ноды

Блокчейн-платформа Waves Enterprise поддерживает следующие два типа авторизации для доступа к REST API/gRPC интерфейсам ноды:

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

  • авторизация с помощью JWT-токена.

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

Секция api конфигурационного файла ноды

Секция api содержит настройки авторизации и REST API/gRPC интерфейсов.

api {
rest {
  # Enable/disable REST API
  enable = yes

  # Network address to bind to
  bind-address = "0.0.0.0"

  # Port to listen to REST API requests
  port = 6862

  # Enable/disable TLS for REST
  tls = no

  # Enable/disable CORS support
  cors = yes

  # Max number of transactions
  # returned by /transactions/address/{address}/limit/{limit}
  transactions-by-address-limit = 10000

  distribution-address-limit = 1000
}

grpc {
  # Enable/disable gRPC API
  enable = yes

  # Network address to bind to
  bind-address = "0.0.0.0"

  # Port to listen to gRPC API requests
  port = 6865

  # Enable/disable TLS for GRPC
  tls = no

  # Akka HTTP settings for gRPC server
  akka-http-settings {
    akka {
      http.server.idle-timeout = infinite

      # Uncomment these settings if you want detailed logging for gRPC calls
      # loggers = ["akka.event.slf4j.Slf4jLogger"]
      # loglevel = "DEBUG"
      # logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
      # stdout-loglevel = "DEBUG"
      # log-dead-letters = 10
      # log-dead-letters-during-shutdown = on
      #
      # actor {
      #   debug {
      #     # enable function of LoggingReceive, which is to log any received message at
      #     # DEBUG level
      #     receive = on
      #     # enable DEBUG logging of all AutoReceiveMessages (Kill, PoisonPill etc.)
      #     autoreceive = on
      #     # enable DEBUG logging of actor lifecycle changes
      #     lifecycle = on
      #     # enable DEBUG logging of unhandled messages
      #     unhandled = on
      #     # enable DEBUG logging of subscription changes on the eventStream
      #     event-stream = on
      #     # enable DEBUG logging of all LoggingFSMs for events, transitions and timers
      #     fsm = on
      #   }
      # }
      #
      # io.tcp.trace-logging = on
      # http.server.http2.log-frames = yes
    }
  }
}

# Authorization strategy should be either 'oauth2' or 'api-key', default is 'api-key'
auth {
  type = "api-key"

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

  # Hash of API key string for PrivacyApi routes
  privacy-api-key-hash = "H6nsiifwYKYEx6YzYD7woP1XCn72RVvx6tC1zjjLXqsu"
}
# For OAuth2:
# auth {
#   type: "oauth2"

#   # OAuth2 service public key to verify auth tokens
#   public-key: "AuthorizationServicePublicKeyInBase64"

# }
}

Описание параметров блока api.rest

  • enable - активация опции REST API на ноде.

  • bind-address - сетевой адрес ноды, на котором будет доступен REST API интерфейс.

  • port - порт прослушивания REST API запросов.

  • tls - включение/отключение TLS для REST API запросов.

  • cors - поддержка кросс-доменных запросов к REST API.

  • transactions-by-address-limit - максимальное количество транзакций, возвращаемых методом /transactions/address/{address}/limit/{limit}.

  • distribution-address-limit - максимальное количество адресов, указываемых в поле limit и возвращаемых методом GET ​/assets​/{assetId}​/distribution​/{height}​/limit​/{limit}.

Описание параметров блока api.grpc

  • enable - активация gRPC-интерфейса на ноде.

  • bind-address - сетевой адрес ноды, на котором будет доступен gRPC-интерфейс.

  • port - порт прослушивания gRPC запросов.

  • tls - включение/отключение TLS для gRPC запросов.

Секция auth для типа api-key

  • type - тип авторизации, установите значение api-key - авторизация по хешу ключевой строки.

  • api-key-hash- хеш от ключевой строки доступа к REST API.

  • privacy-api-key-hash - хеш от ключевой строки доступа к методам privacy.

Секция auth для типа oauth2

  • type - тип авторизации, установите значение oauth2 - авторизация по токену.

  • public-key - публичный ключ сервиса авторизации.

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

Использование авторизации по ключевой строке

В параметре auth-type установите значение api-key. Используя утилиту generators-x.x.x.jar, создайте api-key-hash для доступа к REST API ноды. Для запуска утилиты требуется в качестве одного из параметров указать файл api-key-hash.conf, в котором определяются параметры создания api-key-hash. Команда для запуска утилиты:

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

Полученное в результате исполнения утилиты значение укажите в параметре api-key-hash конфигурационного файла ноды.

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

Использование авторизации по токену

В параметре auth-type установите значение oauth2, в параметре public-key укажите публичный ключ сервиса авторизации.