2014-01-10 4 views
5

Я пытаюсь заставить SignalR работать с использованием Identity ASP.NET. Код очень прост, где мы создаем новое MVC5 веб-приложение, включите Google External Account, войдите с учетной записью Google и сделать запрос на хаб идентифицировать пользователь по телефону:SignalR ASP.NET MVC5 Identity

Context.User.Identity

Во всяком случае , это всегда возвращает null, и, похоже, клиентский прокси не может отправить внешний файл cookie.

Единственный способ решения проблемы делает те же шаги, как указано здесь:

http://gobbe.net/2013/06/13/use-the-asp-net-membership-in-a-signalr-chat-with-an-asp-net-mvc-4-application/

Обходной работает, но я предпочел бы использовать другое решение. Я также проверил https://github.com/gustavo-armenta/CookieAuthenticationSample, но это не использует внешнюю аутентификацию.

Есть ли у вас какие-либо другие идеи о том, как концентратор может распознать внешнюю схему аутентификации ASP.NET Identity?

Thanks

+0

«Обходное решение работает, но я бы предпочел использовать другое решение» - можете ли вы дать какие-либо конкретные причины для этого? Что, если следующее предложение, которое кто-то дает вам, имеет те же проблемы, что и обходной путь, о котором вы уже знаете? Этого можно избежать, если вы объясните причины. –

+0

Спасибо за отзыв. Я пытаюсь понять, не хватает ли чего-то или если SignalR просто не поддерживает внешнюю аутентификацию с использованием идентификатора ASP.NET, и если да, я бы отказался от обходного пути. –

+0

Обходной путь очень небезопасен. Для злоумышленника не составит труда создать действительный токен для произвольного отображаемого имени. Похоже, автор пытался вручную реализовать какой-то HMAC, но полностью не удалось из-за отсутствия какого-либо секретного ключа. Вам было бы намного лучше использовать что-то вроде System.Web.Security.MachineKey или System.Security.Cryptography.ProtectedData. – halter73

ответ

8

Ok. После нескольких часов поиска я отправился в онлайн-поддержку jabbr, и помог Давидфол. Проблема заключалась в упорядочении вызовов класса Startup. У меня было:

 app.MapSignalR(); 
     ConfigureAuth(app); 

вместо:

 ConfigureAuth(app); 
     app.MapSignalR(); 

спасибо Давиду.

Смежные вопросы