HTTP-ответ - 404, а не 401 с авторизацией. Json Я что-то упустил? - PullRequest
0 голосов
/ 16 ноября 2018

Опубликовал это на форумах по сервису приложений Azure и не получил ответа, так что ...

Каркас 4.7.1

Приложение представляет собой веб-форму ASP.Net с двумя контроллерами веб-API.
Веб-сайт и контроллер HealthCheck должны разрешать анонимные запросы. Другой контроллер должен пройти проверку подлинности в Azure Active Directory с использованием сертификата в качестве учетных данных.

Аутентификация в службе приложений установлена ​​на

  • Разрешить анонимные запросы (без действий)
  • Поставщик проверки подлинности установлен на Azure Active Directory
  • Режим управления установлен на Экспресс
  • В приложение управления был добавлен сертификат

Единственная проблема заключается в том, что когда анонимный запрос попадает на защищенный контроллер, возвращается HTTP 404, а не 401.

Если выполняется аутентифицированный запрос, возвращается HTTP 200. Мне не хватает некоторых настроек?

Вот карта маршрута в Global.asax.cs в Application_Start

RouteTable.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = System.Web.Http.RouteParameter.Optional }
);

Вот файл authorization.json

{
  "routes": [{
      "path_prefix": "/",
      "policies": { "unauthenticated_action": "AllowAnonymous" }
    },
    {
      "path_prefix": "/api",
      "policies": { "unauthenticated_action": "RejectWith401" }
    },
    {
      "http_methods": [ "GET"],
      "path_prefix": "/api/HealthCheck",
      "policies": { "unauthenticated_action": "AllowAnonymous" }
    }]
}           

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Проблема заключалась в том, что при перенаправлении проверки подлинности формы обнаруживает 401 и пытается перенаправить на страницу входа, которая не была правильно указана в атрибуте loginUrl элемента формы.Этот код в Application_BeginRequest файла global.aspx.cs исправляет мои проблемы

            var context = new HttpContextWrapper(Context);
        // set flag only if forms auth enabled and request comes from ajax
        if (FormsAuthentication.IsEnabled && context.Request.Url.AbsolutePath.StartsWith("/api",StringComparison.CurrentCultureIgnoreCase))
        {
            context.Response.SuppressFormsAuthenticationRedirect = true;
        }

Включение подробного ведения журнала в Azure (предложено Microsoft) показало, что аутентификация возвращала 401. В тот момент я зналпроисходило перенаправление, и это, вероятно, было аутентификацией форм.Эта ссылка также помогла мне разобраться с исправлением

https://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx/

0 голосов
/ 18 ноября 2018

Должна быть проблема с вашим файлом authorization.json.Есть ли какие-либо подкаталоги, кроме этой /api?Попробуйте добавить их тоже, с /api/(*whatever path*) в вашем path_prefix.

...