Продукты Р7
Корпоративный сервер 2024
Корпоративный сервер 2024
Сервер документов
Сервер документов
Редакторы
Редакторы
Корпоративный сервер 2019
Корпоративный сервер 2019
Графика
Графика
Команда
Команда
Мобильные редакторы
Мобильные редакторы
Облачный офис
Облачный офис
Почта
Почта
Органайзер
Органайзер
Дополнительно
Часто задаваемые вопросы
Разработчикам
Интеграции
Новые возможности

Подпись

Обновлено: 25.12.25

Р7 Сервер документов использует токены, созданные с использованием стандарта JSON Web Tokens.

Эта функция используется в Сервере документов, начиная с версии 4.2.
Для настройки ратификации необходимо отредактировать параметры secret key и токена в конфигурационном файле, который можно найти (или создать) по следующему пути:

  • Для Linux — /etc/Р7/documentserver/local.json.
  • Для Windows — %ProgramFiles%\R7OFFICE\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

Пример конфигурации local.json:

{
    "services": {
        "CoAuthoring": {
            "secret": {
                "browser": {
                    "string": "secret"
                },
                "inbox": {
                    "string": "secret"
                },
                "outbox": {
                    "string": "secret"
                },
            },
            "token": {
                "enable": {
                    "browser": true,
                    "request": {
                        "inbox": true,
                        "outbox": true
                    }
                }
            }
        }
    }
}

Ниже вы можете найти примеры генерации подписи для конфигурации инициализации и запросов. Они взяты из тестовых примеров на разных языках программирования. Советуем использовать этот код в своих проектах для генерации подписей.

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);
    }
}
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,>
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);
};
function jwtEncode($payload) {
    return \Firebase\JWT\JWT::encode($payload, $GLOBALS["DOC_SERV_JWT_SECRET"]);
}
def encode(payload):
    return jwt.encode(payload, config.DOC_SERV_JWT_SECRET, algorithm='HS256')
@jwt_secret = Rails.configuration.jwtSecret

class << self
    def encode(payload)
        return JWT.encode payload, @jwt_secret, 'HS256'
    end
end