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