Ротация LWA в коде C#: в заголовке запроса отсутствует токен доступаC#

Место общения программистов C#
Ответить
Anonymous
 Ротация LWA в коде C#: в заголовке запроса отсутствует токен доступа

Сообщение Anonymous »

Я пытаюсь реализовать запрос ротации секретов LWA, используя «Руководство по использованию API управления приложениями v2023-11-30».
Вот мой тестовый код C#:

public static async Task RotateLWAAsync(
string ClientId = "{Идентификатор вашего клиента}",
string ClientSecret = "{Секрет вашего клиента}",
stringgrant_type = "client_credentials",
stringscope = "sellingpartnerapi::client_credential:rotation",
stringrefreToken = "{Ваш токен обновления}",
CancellationToken cancelToken = default)
{
try
{
var data = string.Empty;

using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("https://api.amazon.com");
var byteArray = Encoding.ASCII.GetBytes($"{ClientId}:{ClientSecret}");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

Элементы словаря = новый Dictionary();
items.Add("grant_type",grant_type );
items.Add("scope",scope); // ScopeConstants.ScopeMigrationAPI);
items.Add("client_id", ClientId);
items.Add("client_secret", ClientSecret);

FormUrlEncodedContent formUrlEncodedContent = new FormUrlEncodedContent (items);
var rs = await client.PostAsync("/auth/o2/token", formUrlEncodedContent, cancelToken);
data = await rs.Content.ReadAsStringAsync();
System.Console.WriteLine($"StatusCode = {rs.StatusCode}, Success = {rs.IsSuccessStatusCode}, Msg = {rs.ReasonPhrase}");

var r = JsonConvert.DeserializeObject(data);
var json = Newtonsoft.Json.JsonConvert.SerializeObject(r, Formatting.Indented);
System.Console.WriteLine(json);
System.Console.WriteLine("---");

using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri( "https://sellingpartnerapi-na.amazon.com");

Элементы словаря = новый словарь();
items.Add("x-amz-access-token", r .access_token);

FormUrlEncodedContent formUrlEncodedContent = new FormUrlEncodedContent(items);
var rs = await client.PostAsync("/applications/2023-11-30/clientSecret", formUrlEncodedContent, cancelToken) ;

System.Console.WriteLine($"StatusCode = {rs.StatusCode}, Success = {rs.IsSuccessStatusCode}, Msg = {rs.ReasonPhrase}");

data = await rs.Content.ReadAsStringAsync();

System.Console.WriteLine ($"data = {data}");

}
return true;
catch (Exception ex)
{
System.Console.WriteLine($"Ошибка выполнения: {ex.Message}");

возвращает false;
}

Приведенный выше код приводит к следующему выводу:
StatusCode = OK, Success = True, Msg = OK
{
"access_token": "{Возвращён правильный токен доступа}",
"refresh_token" : null,
"token_type": "bearer",
"expires_in": 3600,
"date_Created": "2024-09-23T14:29:32.6320411Z"
}
---
StatusCode = Forbidden, Success = False, Msg =
data = {
«ошибки»: [
{
«код»: «Несанкционировано»,
«сообщение»: «Доступ к запрошенному ресурсу запрещен».
«подробности»: «В заголовке запроса отсутствует токен доступа».
]

Что я делаю не так со своим вторым клиентом HTTP-вызова.PostAsync(...), который в случае успеха должен вернуть код состояния 204?


Подробнее здесь: https://stackoverflow.com/questions/790 ... est-header
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»