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);
}