Authentication

Описание

Параметры аутентификации запроса.

Описание полей

Поле Описание
WmId WmId вызывающего.
Time Текущее время. Формат: "yyyy-MM-ddTHH:mm:ss.fffffffK".
Nonce Уникальное число.
Mac Подпись запроса.

Свойство "Mac" string

Замечания

Подпись формируется использую формат указанный в запросах. Формула: Base64(HMacSha256(key = Sha256(Utf8(password)), bytes = Utf8(plainString))). Поля Time, Nonce ограничивают время действия подписи.

Замечания

Вычисление Mac на примере запроса TicketGetInput:

private string callerWmId_;
private string password_;
private string secureId_;
private DateTimeOffset time_;
private long nonce_;

private TicketGetInput GetInput()
{
    var plainString = callerWmId_
        + ';' + secureId_
        + ';' + time_.ToString(@"yyyy-MM-ddTHH:mm:ss.fffffffK", CultureInfo.InvariantCulture)
        + ';' + nonce_.ToString(CultureInfo.InvariantCulture);

    return new TicketGetInput
    {
        Authentication = new Authentication
        {
            WmId = callerWmId_,
            Mac = Mac(password_, plainString),
            Time = time_,
            Nonce = nonce_,
        },
        SecureId = secureId_,
    };
}

private static string Mac(string password, string plainString)
{
    var encoding = Encoding.UTF8;
    var passwordBytes = Sha256(encoding.GetBytes(password));
    var bytes = HMacSha256(passwordBytes, encoding.GetBytes(plainString));
    var mac = Convert.ToBase64String(bytes);
    return mac;
}

private static byte[] Sha256(byte[] bytes)
{
    using (var h = new SHA256Managed())
        return h.ComputeHash(bytes);
}

private static byte[] HMacSha256(byte[] key, byte[] bytes)
{
    using (var h = new HMACSHA256(key))
        return h.ComputeHash(bytes);
}