Авторизация панели управления Hangfire не работает должным образом на сервере

#iis #amazon-ec2 #hangfire

#iis #amazon-ec2 #hangfire

Вопрос:

Мое приложение Asp Net Core размещено на Amazon EC2 с использованием IIS. Я добавил авторизацию HangFire, внедрив IDashboardAuthorizationFilter. Мое клиентское приложение — это приложение Angular. С моего контроллера (на стороне сетевого ядра Asp) я передаю токен-носитель в файл cookie с ответом.Перенаправление на URL панели мониторинга Hangfire.

В локально размещенном приложении оно работает отлично, и мой метод авторизации в моей реализации фильтра авторизации передает файл cookie в запросе. Кроме того, панель управления HangFire отображается в браузере на той же вкладке.

Однако в среде prod / qa есть 2 проблемы:

  1. Исходный запрос GET, отправленный с клиента на мой контроллер API, возвращается со статусом 302, а последующий запрос на URL-адрес hangfire становится запросом GET вместо перенаправления. Он начинает анализировать html (из hangfire) и выдает ошибку в консоли разработчика.
  2. Мой метод авторизации панели управления HangFire получает запрос без cookie, который я установил в своем API контроллера, прежде чем перенаправлять на URL-адрес hangfire.

Пожалуйста, посмотрите мой код ниже:

 MyAuthorizationFilter.cs

public class MyAuthorizationFilter: IDashboardAuthorizationFilter {

 public bool Authorize(DashboardContext context) {
            try {
                
                var httpContext = context.GetHttpContext();

                // If it is a request for localhost, allow it straightaway
                if (httpContext.Request.Host.ToUriComponent().Contains(Constants.Localhost)) {
                    return true;
                }

                string accessToken = httpContext.Request.Cookies[Constants.HangFireTokenKey];

                LogHelper.ApiLog("Access Token: "   accessToken, LoggerLevel.DEBUG);

                if (string.IsNullOrEmpty(accessToken)) {

                    return false;
                }

                ClaimsPrincipal claimsPrincipal = Utils.ValidateToken(accessToken);

                LogHelper.ApiLog("Claims Principal Claims: "   JsonConvert.SerializeObject(claimsPrincipal.Claims), LoggerLevel.DEBUG);

                LogHelper.ApiLog("Allowed users: "   JsonConvert.SerializeObject(this._allowedUsers));

                if (claimsPrincipal != null) {

                    string userEmail = claimsPrincipal.Claims.FirstOrDefault(c => c.Type == "email")?.Value;

                    if (this._allowedUsers.Contains(userEmail)) {
                        return true;
                    }
                }

                return false;
              } catch (Exception){
                LogHelper.ApiLog("HangFire Exception:"   e);
                return false;
           }
    }

MyController.cs API

[HttpGet("hangfireDashboard")]
        public void ShowHangFireDashboard() {

            try {
                string token = Request.Headers["Authorization"];

                if (null != token) {
                    // Set our Bearer token as a cookie for Dashboard redirect
                    // Hangfire sends this cookie to Authorize method of DashBoardAuthorizationFilter 
                    Response.Cookies.Append(Constants.HangFireTokenKey, token, new CookieOptions { Expires = DateTime.Now.AddMinutes(Constants.HangFireCookieExpiryTimeInMinutes) });
                    Response.Redirect(this._configuration["HangFire:DashboardUrl"]);
                }
            } catch (Exception) {
                throw;
            }
        }

My Angular Client side function - GET request to my hangfireDashboard API 
    
   /**
     * Send request for HangFire Dashboard
     */
    showHangFireDashboard() {
        const apiUrl = this._apiUrl   Global.route.hangfireDashboard;
        return this._httpClient.get(apiUrl);
    }
 

Первоначальный запрос GET от моего клиента на мой сервер

ПОЛУЧИТЬ запрос от клиента к серверу мой контроллер

Следующее должно было появиться как перенаправление, а не запрос на получение введите описание изображения здесь

Предварительный просмотр приведенного выше запроса (/ hangFire), который должен был появиться как перенаправление, а не получить

введите описание изображения здесь

[Обновлено]: консоль разработчика показывает ошибку, поскольку она должна проанализировать html-тег, который пришел в ответ на запрос GET от Hangfire (это должно было быть перенаправлением вместо GET)

введите описание изображения здесь

Комментарии:

1. Можете ли вы показать мне ошибку в консоли разработчика? и вы можете использовать Fiddler для просмотра процесса вашего запроса.

2. @samwu Я обновил свой вопрос с ошибкой, которая появляется в консоли разработчика. На самом деле ошибка связана с синтаксическим анализом тегов HTML, поскольку веб-страница была отправлена в ответ на запрос GET (я надеялся получить ее как перенаправление, а не ПОЛУЧИТЬ)

3. Вы указали тип ответа? HttpClient по умолчанию преобразует ответ в response.json() , я думаю, это также может вызвать ошибку в консоли.