Я пользуюсь AWS EC2 последние пару лет. Теперь я хочу включить HTTPS для моего приложения, разработанного в ASP. NET WEB API с интерфейсом в AngularJS. Для этого я сделал дистрибутив CloudFront. Он успешно загрузил статические файлы и вызвал API REST для EC2, размещенного в IIS. Но, к сожалению, пользовательские заголовки имеют значение null , когда запросы пришли из CloudFront к моему источнику.
Я выполнил следующие соответствующие настройки в дистрибутиве CloudFront.
Ниже приведены мои настройки для пользовательских заголовков источника.
Ниже приведены мои настройки поведения кэша.
Дополнительные настройки включали следующее:
- Белый список файлов cookie: авторизация, VDName
- Пересылка и кеширование строки запроса: пересылка всех, кеш на основе всех данных
- Политика протокола происхождения: только HTTP
- Политика протокола просмотра: перенаправить HTTP на HTTPS
Мое приложение имеет страницу входа, где Авторизация не требуется. При успешном входе в систему приложение устанавливает три пользовательских заголовка.
- Авторизация
- х-рабочая компания
- х-рабочая ветвь
Мое приложение успешно регистрируется в пользователях, но затем автоматически выходит из системы. Итак, чтобы проверить эту проблему, я написал следующий небольшой код в своем классе Authorization для проверки значений заголовка.
valToUpd.Add("S6", "CHK1");
valToUpd.Add("S7", "Before Null");
valToUpd.Add("S8", request.Headers.Count().ToString());
valToUpd.Add("S9", request.Headers.GetValues("Authorization").Single());
valToUpd.Add("S10", request.Headers.GetValues("x-working-company").Single());
valToUpd.Add("S11", request.Headers.GetValues("x-working-branch").Single());
var toUpdt = "";
if (request.Headers.Any(x => x.Key == "Authorization"))
toUpdt = "A-";
if (request.Headers.Any(x => x.Key == "x-working-company"))
toUpdt += "C-";
if (request.Headers.Any(x => x.Key == "x-working-branch"))
toUpdt += "B-";
var ds = request.Headers.Where(x => x.Key == "x-working-branch").Select(c => c.Value);
toUpdt += " br val = ";
foreach (var item in ds)
{
foreach (var i in item)
{
toUpdt += i + " - ";
}
}
valToUpd.Add("S12", toUpdt);
usersHelperAdo.Update("Users", whereClause, valToUpd); // Its my DAL method to update values in Users table as per the where clause.
И, как и ожидалось, CloudFront пересылает заголовки к моему источнику, но с нулевыми значениями. Результаты следующие:
Далее следует режим разработчика FireFox, где мой клиент отправляет запрос в CloudFront со всеми пользовательскими заголовками с соответствующими значениями. Но затем CloudFront пересылает эти заголовки в исходное положение, но делает значения пустыми.
Итак, что я делаю не так? Почему CloudFront передают null в качестве значения в моих заголовках. Любая помощь высоко ценится. Большое спасибо!
EDIT
Я попытался поразить API с помощью Почтальона, и ниже приведены скриншоты.
Ниже показан мой вызов метода Login и, как и ожидалось, он возвращает токен Auth с другими пользовательскими заголовками, установленными в ответе.
Я извлек необходимые заголовки из ответа, отправил еще один запрос GET и получил следующее.
Выдает 403 запрещенных ошибки. Странно, что в режиме разработки браузера он выдает 401 несанкционированную ошибку, а в Почтальоне - 403 Запрещено.
Любая помощь. Спасибо