Использование Sinch REST API в C#

Я пытаюсь использовать API-интерфейс Sinch REST в С# для проверки смс, и у меня возникают проблемы с кодированием строк, необходимых для авторизации. Я использую APPLICATION SIGNED REQUEST для Auth, и я хотел бы знать, какие функции С# использовать для создания содержимого-Md5 и stringtoSign. Для контента MD-5 вот фрагмент кода, который у меня есть

var body = JsonConvert.SerializeObject(smsRequest);

var hs = System.Security.Cryptography.MD5.Create();

var db = hs.ComputeHash(Encoding.UTF8.GetBytes(body));

var stringToSign = Convert.ToBase64String(db);

 public class SmsRequest
{
    [JsonProperty("identity")]
    public Identity Identity;

    [JsonProperty("method")]
    public string Method;

    [JsonProperty("metadata")]
    public Metadata Metadata;
}

public class Metadata
{
    [JsonProperty("os")]
    public string Os;

    [JsonProperty("platform")]
    public string Platform;

}

public class Identity
{
    [JsonProperty("type")]
    public string Type;

    [JsonProperty("endpoint")]
    public string Endpoint;
}

Теперь для создания stringtoSign я использую следующий код

var stringToSign = "POST" + Environment.NewLine + "jANzQ+rgAHyf1MWQFSwvYw==" + Environment.NewLine +
                  "application/json" + Environment.NewLine + "x-timestamp:2014-06-04T13:41:58Z" +
                  Environment.NewLine + "/v1/sms/+46700000000";//used for signing

var secret = "JViE5vDor0Sw3WllZka15Q=="; // this needs to be signed
var encoding = new System.Text.UTF8Encoding();
byte[] keyByte = encoding.GetBytes(stringToSign);

var hmacsha256 = new HMACSHA256(keyByte);

byte[] messageBytes = Encoding.UTF8.GetBytes(secret);
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);

var res = Convert.ToBase64String(hashmessage);

Я использую значения из примера здесь https://www.sinch.com/using-rest/ и я ожидаю, что результатом будет "qDXMwzfaxCRS849c/2R0hg0nphgdHciTo7OdM6MsdnM=", а с помощью моего метода я получаю "2/8KqdiC2708EC84vTinPchiATRJiZU4Mgfpykb4F40=".

Что я здесь делаю неправильно?


person ashish1238    schedule 03.04.2018    source источник
comment
я думаю, вы используете stringtosign в качестве ключа и секрета в качестве объекта для подписи. они должны быть наоборот   -  person pm100    schedule 04.04.2018
comment
поменял местами переменные, и теперь я получаю zNtnvbGn1B0esBeJHAgda87uNEI42UFm9bsAMnub9+U=, что также не соответствует исходному значению.   -  person ashish1238    schedule 04.04.2018
comment
Команда Sinch, пожалуйста, помогите, так как это потенциально блокирует мою работу.   -  person ashish1238    schedule 04.04.2018


Ответы (1)


Я бы использовал наш замечательный nuget https://github.com/sinch/nuget-serversdk, если вы не хотите устанавливать nuget, вы можете проверить источник и взять нужные вам фрагменты. его открытый исходный код и вы

person cjensen    schedule 04.04.2018
comment
Какая версия VS требуется для сборки этого проекта? я не могу построить его с помощью vs 2012 или выше. - person ashish1238; 05.04.2018
comment
Sdk работает отлично, но я хочу быть уверенным в условиях лицензирования, если я хочу использовать его в коммерческих целях. Пожалуйста, сообщите. - person ashish1238; 05.04.2018
comment
эй, это плата, как вы идете. - person cjensen; 05.04.2018
comment
Я понимаю, что буду платить за sms/flash-вызовы за каждую такую ​​операцию, но меня беспокоило использование этого пакета nuget в коде продукта. Несет ли он какую-либо ответственность с точки зрения лицензирования? Каковы условия лицензии для SDK и можно ли его использовать как есть? - person ashish1238; 05.04.2018
comment
это MIT, так что проблем нет - person cjensen; 05.04.2018