• Post category:Подпись
  • Запись изменена:07.06.2023

Р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
Пример конфигурации 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