Р7 Document Server использует токены, созданные с использованием стандарта JSON Web Tokens.
Эта функция используется в Сервере документов, начиная с версии 4.2.
Для настройки ратификации необходимо отредактировать параметры secret key и токена в конфигурационном файле, который можно найти (или создать) по следующему пути:
Для Linux — /etc/Р7/documentserver/local.json.
Для Windows — %ProgramFiles%\Р7\DocumentServer\config\local.json.
Значения по умолчанию доступны в файле конфигурации default.json, который доступен в папках выше (для Linux и Windows).
Пожалуйста, не редактируйте содержимое файла default.json напрямую. Значения по умолчанию будут восстанавливаться каждый раз, когда вы перезапускаете контейнер Docker или обновляете Document Server до новой версии, и все ваши изменения будут потеряны.
Перезапустите службы, чтобы изменения конфигурации вступили в силу:
supervisorctl restart all
Параметр | Описание | Тип | Пример |
services.CoAuthoring.secret.browser.string | Определяет secret key для создания токена в клиентских запросах браузера к Р7 Document Server. | строковый | secret |
services.CoAuthoring.secret.inbox.string | Определяет secret key для создания токена во входящих HTTP-запросов с командами из службы хранения документов в командная служба документов, службу конвертации документов и службу создания документов. | строковый | secret |
services.CoAuthoring.secret.outbox.string | Определяет secret key для создания токена в исходящих HTTP-запросов к callbackUrladdress службой редактирования документов. | строковый | secret |
services.CoAuthoring.token.enable.browser | Определяет, включен ли токен в запросах браузера со стороны клиента или нет. | логический | false |
services.CoAuthoring.token.enable.request.inbox | Определяет, включен ли токен во входящих HTTP запросах. | логический | false |
services.CoAuthoring.token.enable.request.outbox | Определяет, включен ли токен в исходящих HTTP запросов | логический | false |
{
"services": {
"CoAuthoring": {
"secret": {
"browser": {
"string": "secret"
},
"inbox": {
"string": "secret"
},
"outbox": {
"string": "secret"
},
},
"token": {
"enable": {
"browser": true,
"request": {
"inbox": true,
"outbox": true
}
}
}
}
}
}
Примеры кода для генерации подписи
Ниже вы можете найти примеры генерации подписи для конфигурации инициализации и запросов. Они взяты из тестовых примеров на разных языках программирования. Советуем использовать этот код в своих проектах для генерации подписей.
- C#
public static class JwtManager
{
private static readonly string Secret;
public static readonly bool Enabled;
static JwtManager()
{
Secret = WebConfigurationManager.AppSettings["files.docservice.secret"] ?? "";
Enabled = !string.IsNullOrEmpty(Secret);
}
public static string Encode(IDictionary<string, object> payload)
{
var encoder = new JwtEncoder(new HMACSHA256Algorithm(),
new JsonNetSerializer(),
new JwtBase64UrlEncoder());
return encoder.Encode(payload, Secret);
}
}
- JAVA
public static String CreateToken(Map<string, object=""> payloadClaims)
{
try
{
String secret = ConfigManager.GetProperty("files.docservice.secret");
Signer signer = HMACSigner.newSHA256Signer(secret);
JWT jwt = new JWT();
for (String key : payloadClaims.keySet())
{
jwt.addClaim(key, payloadClaims.get(key));
}
return JWT.getEncoder().encode(jwt, signer);
}
catch (Exception e)
{
return "";
}
}</string,>
- NODE.JS
var configServer = require('config').get('server');
var cfgSignatureSecretExpiresIn = configServer.get('token.expiresIn');
var cfgSignatureSecret = configServer.get('token.secret');
var cfgSignatureSecretAlgorithmRequest = configServer.get('token.algorithmRequest');
documentService.getToken = function (data) {
var options = {algorithm: cfgSignatureSecretAlgorithmRequest, expiresIn: cfgSignatureSecretExpiresIn};
return jwt.sign(data, cfgSignatureSecret, options);
};
- PHP
function jwtEncode($payload) {
return \Firebase\JWT\JWT::encode($payload, $GLOBALS["DOC_SERV_JWT_SECRET"]);
}
- PYTHON
def encode(payload):
return jwt.encode(payload, config.DOC_SERV_JWT_SECRET, algorithm='HS256')
- RUBY
@jwt_secret = Rails.configuration.jwtSecret
class << self
def encode(payload)
return JWT.encode payload, @jwt_secret, 'HS256'
end
end