403 Запрещено при доступе к Kroger API из Azure -Hosted. Net Приложения Core 3.1 - PullRequest
0 голосов
/ 08 февраля 2020

Проблема: мне нужно определить природу этой ошибки, чтобы я мог знать, как ее устранить. Я выдвинул несколько гипотез: - это может быть конфигурация брандмауэра / прокси в Azure - может быть неправильная конфигурация с API Крогера - может быть публикация c отклонения сертификата из приложения Azure - может быть чем-то совершенно не связанным на любой из вышеперечисленных

Подробности: я пытаюсь подключиться к API разработчика Kroger. Следующий код был упрощен для этого поста. (Я использовал IHttpClientFactory ранее для создания моего HTTPClient). Это работает локально, но как только он развернут в веб-службе Azure, я получаю сообщение 403 (которое, похоже, приходит от Azure, а не от внешнего API):

You don't have permission to access http://api.kroger.com on this server.

Этот же код работает в Azure для других сторонних API через HTTPS, поэтому у меня возникло подозрение, что эта ошибка происходит из-за не использования правильных клиентских сертификатов, поэтому Azure пытается вызвать через http?

Я пытался решить многие проблемы, включая загрузку сертификата publi c, который я скачал с https://api.kroger.com, в свою службу приложений azure. Кажется, что сертификат извлекается правильно, но запрос все равно не выполняется с тем же сообщением.

Соответствующий код приведен ниже (без использования сертификата клиента):

using(var client = _requestFactory.CreateClient()))
{
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("basic", _clientId);
        client.DefaultRequestHeaders.Add("Accept", "application/json");

        var newRequest = new Dictionary<string, string>
        {
            { "grant_type", "client_credentials" },
            { "scope", "product.compact" }
        };

        var response = await client.PostAsync($"https://api.kroger.com/v1/connect/oauth2/token", new FormUrlEncodedContent(newRequest));
        return Ok(await response.Content.ReadAsStringAsync());
}

Ниже приведен полный ответ от сервер.

{
    "version": "1.1",
    "content": {
        "headers": [{
            "key": "Content-Type",
            "value": ["text/html"]
        }, {
            "key": "Content-Length",
            "value": ["299"]
        }, {
            "key": "Expires",
            "value": ["Sat, 08 Feb 2020 19:18:55 GMT"]
        }]
    },
    "statusCode": 403,
    "reasonPhrase": "Forbidden",
    "headers": [{
        "key": "Server",
        "value": ["AkamaiGHost"]
    }, {
        "key": "Mime-Version",
        "value": ["1.0"]
    }, {
        "key": "Date",
        "value": ["Sat, 08 Feb 2020 19:18:55 GMT"]
    }, {
        "key": "Connection",
        "value": ["close"]
    }, {
        "key": "Set-Cookie",
        "value": ["akaalb_Digital_ALB_API=~op=KT_Digital_API_KCVG_F5:api-kcvg|~rv=47~m=api-kcvg:0|~os=75b4a9ec926d2a9e67035451773cec6c~id=63ba4b3e2a027e4d53b693e2fded5ac3; path=/; HttpOnly; Secure; SameSite=None"]
    }],
    "trailingHeaders": [],
    "requestMessage": {
        "version": "1.1",
        "content": {
            "headers": [{
                "key": "Content-Type",
                "value": ["application/x-www-form-urlencoded"]
            }, {
                "key": "Content-Length",
                "value": ["51"]
            }]
        },
        "method": {
            "method": "POST"
        },
        "requestUri": "https://api.kroger.com/v1/connect/oauth2/token",
        "headers": [{
            "key": "Authorization",
            "value": ["basic {removed}"]
        }, {
            "key": "Accept",
            "value": ["application/json"]
        }, {
            "key": "Request-Context",
            "value": ["appId={removed}"]
        }, {
            "key": "Request-Id",
            "value": ["|{removed}"]
        }, {
            "key": "traceparent",
            "value": ["{removed}"]
        }],
        "properties": {}
    },
    "isSuccessStatusCode": false
}
...