Настройка авторизации и 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 укажите публичный ключ сервиса авторизации.