Я пытаюсь использовать Brightspace API , но я получаю ответ 403 (Запрещено).
Я зарегистрировал свое приложение с помощью Manage Extensability (/ d2l На странице / lp / extensibility / home) я сгенерировал идентификатор пользователя и ключ из API Test Tool .
Используя все это, я установил пакет NuGet D2L.Extensibility.AuthSdk
в свой проект. Затем в соответствующем классе я создал свойство для UserContext и инициализирую его в конструкторе следующим образом:
_d2LUserContext = new D2LAppContextFactory()
.Create(OrionConfiguration.D2LApplicationId, OrionConfiguration.D2LApiKey)
.CreateUserContext(
"censored user id",
"censored user key",
new HostSpec("https", OrionConfiguration.D2LUrl.Substring(8), 443)
);
Примечания:
-
.Substring(8)
Это связано с тем, что D2LUrl включает в себя схему URL - Идентификатор и ключ пользователя были сгенерированы этим утром, поэтому срок их действия еще не истек
Затем я пытаюсь вызвать API. Код для этого разделен на несколько методов.
private string AuthParam(string path, string method)
{
return _d2LUserContext
.CreateAuthenticatedTokens($"/d2l/api/lp/1.2{path}", method)
.Select(tuple => $"{tuple.Item1}={tuple.Item2}")
.Aggregate((acc, p) => $"{acc}&{p}");
}
public Task<UserResponse> CreateUser(UserRequest userRequest)
{
const string path = "/users";
return _httpUtils.Post<UserResponse>($"{path}/?{AuthParam(path, "POST")}", userRequest);
}
UserRequest
- это версия POC # O (Plain Old C# Object) модель, которую API ожидает .
Вот соответствующий метод в классе HttpUtils
- это обертка вокруг HttpClient
, который я написал, чтобы избавиться от некоторых шаблонов в других классах.
internal async Task<T> Post<T>(string route, dynamic body)
{
var response = await _httpClient.PostAsync(
_baseUrl + route,
new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json")
);
_logger.LogInformation($"POST request to {route}");
_logger.LogInformation(await response.Content.ReadAsStringAsync());
return JsonConvert.DeserializeObject<T>(await response.Content.ReadAsStringAsync());
}
Теперь, собрав все вместе, когда я пытаюсь отладить вызов этих методов, я устанавливаю точку останова на строке после моего запроса POST, и мы видим, что я получаю 403
Мне интересно, почему это происходит. Пользователь, из которого были сгенерированы ключ и идентификатор, является супер-администратором, поэтому это не проблема с разрешениями.