Я пытаюсь построить заголовок авторизации для Docebo, но я не могу заставить его работать, поскольку документация недостаточно описательна, и их пример кода (только пример кода) очень запутан.Docebo - построение заголовка авторизации
Это в основном все Docebo documentation:
То, что я пытаюсь сделать, чтобы получить список всех пользователей.
public JsonResult GetCoursesCount()
{
const string apiKey = "[API KEY FROM MY DOCEBO PORTAL]";
const string apiSecret = "[API SECRET FROM MY DOCEBO PORTAL]";
const string doceboUrl = "[URL OF MY DOCEBO PORTAL]";
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var toEncodeWithSha1 = String.Format("{0},{1}", String.Join(",", new[] {"0", "null"}), apiSecret); // should the values be values or parameters??
var code = GetSHA1HashData(toEncodeWithSha1);
var toEncodeWithBase64 = String.Format("{0}:{1}", apiKey, code);
code = Base64Encode(toEncodeWithBase64);
var xAuthorisation = String.Format("Docebo {0}", code);
httpClient.DefaultRequestHeaders.Add("X-Authorization", xAuthorisation);
var stringContent = JsonConvert.SerializeObject("{ \"from\": \"0\", \"count\": \"null\" }");
var userResult = httpClient.PostAsync(String.Format("{0}/api/user/listUsers", doceboUrl),
new StringContent(stringContent)).Result;
var userData = JsonConvert.DeserializeObject<dynamic>(userResult.Content.ReadAsStringAsync().Result);
return new JsonResult { Data = userData, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
}
private string GetSHA1HashData(string data)
{
//create new instance of md5
var sha1 = SHA1.Create();
//convert the input text to array of bytes
byte[] hashData = sha1.ComputeHash(Encoding.Default.GetBytes(data));
//create new instance of StringBuilder to save hashed data
var returnValue = new StringBuilder();
//loop for each byte and add it to StringBuilder
foreach (byte @byte in hashData)
{
returnValue.Append(@byte.ToString());
}
// return hexadecimal string
return returnValue.ToString();
}
private string Base64Encode(string plainText)
{
var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
return Convert.ToBase64String(plainTextBytes);
}
В любое время я связаться со своим API я получаю "{ "успех": ложь, "сообщение": "Значение заголовка Authorization не соответствует", "код": 104 }".
Было бы здорово получить отклик на этот или понятный перевод их документации по API.
Привет, Якуб, я также борюсь с API Docebo. Могу ли я узнать, являются ли параметры «abc»: «1», def: «2»}, а ваш ключ «JUSTAKEY», токен маркера SHA1 должен быть SHA1 («1,2, JUSTAKEY») или SHA1 («abc , 1, Защита, 2, JUSTAKEY ")? Заранее спасибо. – qcam
Эй, @huynhquancam, это должно быть «String.Format (« {0}, {1} », String.Join (", ", listKeyValuePair.Select (n => n.Value)), apiSecret);" Это означает значения сначала, а затем ключ. В вашем примере это будет «1,2, YOURSERCRET». –
привет, Якуб, спасибо. Я действительно пытался реализовать его в Ruby. :) Теперь можно подключиться. – qcam