При отправке запросов на облако vuforia, необходимо составлять Autorization такого вида:
Signature = Base64(HMAC-SHA1(server_secret_key, StringToSign ) ) ;
StringToSign =
HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
Request-Path;
где http-verb это метод запроса,Date это дата и т.д. Мне как нужно формировать запрос вида: StringToSign=HTTP-Verb: POST,Content-MD5:....; так? или не нужно писать HTTP-Verb и прочие заголовки? вот код который я написал для теста чтобы сделать работающий модуль
using System.Resources;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Security.Cryptography;
using System.IO;
using System.Threading.Tasks;
using System;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите название изображения");
string name = Console.ReadLine();
float width=1.0f;
var arr=File.ReadAllBytes("image.jpg");
var meta = Convert.ToBase64String(arr);
string json = @"{name:"+name+"," +
"width:"+width+"," +
"image:"+arr+"}";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://vws.vuforia.com/targets");
request.Method = "POST";
request.Host = "vws.vuforia.com";
request.Date = DateTime.Now.ToUniversalTime();
var qwe = JSON.Encoder("<здесь закрытый ключ>");
request.Headers.Add("Autorization", "VWS <здесь мой открытый ключ хранится>:"+qwe);
request.ContentType = "application/json";
using (var requestStream = request.GetRequestStream())
{
using (var writer = new StreamWriter(requestStream))
{
writer.Write(json);
}
}
using (var httpResponse = request.GetResponse())
using (var responseStream = httpResponse.GetResponseStream())
using (var reader = new StreamReader(responseStream))
{
string response = reader.ReadToEnd();
Console.WriteLine(response);
}
Console.WriteLine("name: " + name + "" +
"width: " + width + "" +
"image: " + arr);
Console.ReadLine();
}
public void Crypto()
{
}
}
public static class JSON
{
const string POST = "POST /targets HTTP/1.1";
const string Host = "Host: vws.vuforia.com";
const string Date = "Date: ";
const string ContentMD5 = "Content-MD5: d41d8cd98f00b204e9800998ecf8427e";
const string ContentType = "Content-Type: application/json";
static string Metadata { get; set; }
public static string Encoder(string secret)
{
string StringToSign = "POST 1.1 \n" +
"Content-MD5 d41d8cd98f00b204e9800998ecf8427e \n" +
"Content-Type: application'/'json \n" +
"Date " + System.DateTime.Now.ToString("R") + "\n" +
"Request-Path";
string Signature;
string res = secret + StringToSign;
var sha = System.Security.Cryptography.KeyedHashAlgorithm.Create("HMACSHA1");
sha.Key = System.Text.Encoding.UTF8.GetBytes(res);
Signature = System.Convert.ToBase64String(sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(StringToSign)));
return Signature;
}
public static string Encoder(string secret, string toSign)
{
string StringToSign = "POST 1.1 \n" +
"Content-MD5 d41d8cd98f00b204e9800998ecf8427e \n" +
"Content-Type: application'/'json \n" +
"Date " + System.DateTime.Now.ToString("R") + "\n" +
"Request-Path";
string Signature;
string res = secret + toSign;
var sha = System.Security.Cryptography.KeyedHashAlgorithm.Create("HMACSHA1");
sha.Key = System.Text.Encoding.UTF8.GetBytes(res);
Signature = System.Convert.ToBase64String(sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(StringToSign)));
return Signature;
}
public static string Encoder(string secret, string toSign, string Metadata)
{
string StringToSign = "POST 1.1 \n" +
"Content-MD5: d41d8cd98f00b204e9800998ecf8427e \n" +
"Content-Type: application'/'json \n" +
"Date " + System.DateTime.Now.ToString("R") + "\n" +
"Request-Path";
string Signature;
string res = secret + toSign;
var sha = System.Security.Cryptography.KeyedHashAlgorithm.Create("HMACSHA1");
sha.Key = System.Text.Encoding.UTF8.GetBytes(res);
Signature = System.Convert.ToBase64String(sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(StringToSign)));
return Signature;
}
}
}
Однако у меня выбивает ошибку 401 что на сайте разработчика является ошибкой несанкционированного доступа, поэтому я думаю с signature есть какие то проблемы. С запросами к Api работаю впервые поэтому не совсем варюсь в этом котле. На сайте разработчика висит вот такой пример:
POST /targets HTTP/1.1
Host: vws.vuforia.com
Date: Mon, 23 Apr 2012 12:45:19 GMT
Authorization: VWS df8d23140eb443505c0661c5b58294ef472baf64:jHX6oLeqTXpynyqcvVC2MSHarhU
Content-Type: application/json
{
"name":"tarmac",
"width":32.0,
"image":"0912ba39x...",
"application_metadata":"496fbb6532b3863460a984de1d980bed5ebcd507"
}
Где Authorization: VWS {provision_access_key}:{Signature}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости