Arhn - архитектура программирования

SignalR /negotiate отправляет запросы к /Account/Login — у меня нет конечной точки Account/Login

Я вижу много записей в своих журналах по этому запросу:

/signalr/negotiate

Ошибка:

The controller for path '/Account/Login' was not found or does not implement IController

У меня есть клиент JS, подключающийся к AppHub, который требует аутентификации:

[Authorize]
[HubName("appHub")]
public class AppHub : Hub
{
    // content
}

Это происходит из-за того, что существует активный сеанс signalr с просроченным файлом cookie, пытающимся подключиться:

  • Я не уверен, почему запрос автоматически ищет эту страницу. Это нигде не указано в моем web.config, маршрутах или где-либо еще. Почему это происходит?
  • Я бы хотел, чтобы клиент signalR не пытался подключиться, если пользователь не прошел проверку подлинности. Как этого добиться?
05.08.2017

  • похоже на редирект, вызванный неудачной авторизацией 09.08.2017
  • @Павел, да. 09.08.2017

Ответы:


1

Если я правильно понимаю вашу проблему, вы захотите создать свой собственный класс для обработки этого, унаследовав класс AuthorizeAttribute: https://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v=vs.118).aspx

Например:

public class MyCustAuthorize : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new HttpUnauthorizedResult();
        }
        else
        {
            //modify this to do whatever you want to happen if unauthorized
            filterContext.Result = new RedirectResult("/session/noaccess/");
        }

    }

}

Затем вы можете украсить его своим пользовательским классом вместо авторизации по умолчанию (пример взят из контроллера mvc, но он должен работать так же на вашем концентраторе). Итак:

[Authorize]
public class AdminController : Controller
{

Становится так:

[MyCustAuthorize]
public class AdminController : Controller
{

Я считаю, что /Account/Login — это путь по умолчанию для аутентификации форм, поэтому он направляется туда, если он не определен в вашем файле конфигурации.

В качестве альтернативы вы можете вставить конкретный URL-адрес для перенаправления, если это то, что вы ищете, поместив следующее значение атрибута loginUrl в свой раздел auth > элемент forms в web.config:

15.08.2017

2

Похоже, что это может быть похоже на эти другие ответы на уже заданные здесь вопросы, и они могут предоставить ваше решение:

Stackoverflow 1

Stackoverflow 2

Вы пытались остановить соединение в клиенте, когда они больше не авторизованы?

 $.connection.hub.stop();
09.08.2017
  • У меня есть [Авторизация] на всем моем хабе (см. вопрос). Пользователь становится неаутентифицированным, а клиент signalR продолжает попытки reconnect, что приводит к множеству запросов к Account/Login. Я пытаюсь предотвратить эти запросы. 09.08.2017
  • Клиент должен остановиться, если он не может повторно подключиться в течение тайм-аута повторного подключения. 09.08.2017

  • 3

    Ваше приложение использует FormsAuthentication, поэтому атрибут Authorize по умолчанию перенаправляет на страницу входа, когда ему не удается авторизоваться.

    Вы можете отключить это, добавив в свой web.config следующее:

    <modules runAllManagedModulesForAllRequests="true">
      <remove name="FormsAuthentication" />
    </modules>
    

    Это удалит все поведения по умолчанию.

    В вашем app.config может быть что-то похожее на

    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
      </providers>
    </membership>
    

    Вот что добавляет эти поведения по умолчанию для вас.

    11.08.2017
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..