Безопасное соединение SignalR между клиентом .NET и сервером

В SignalR .NET мы устанавливаем соединение между клиентом и сервером, как показано ниже:

var connection = new HubConnection("http://mysite/");

Затем мы подписываемся на события и запускаем соединение, как показано ниже:

connection.Start().Wait();

Что делать, если я хотел бы установить безопасное соединение между клиентом и сервером. Как мы можем достичь этого с текущими функциями?

Я заметил, что в классе HubConnection есть тип свойства System.Net.ICredentials. Это способ для этого? Если да, то как мы должны обрабатывать аутентификацию на стороне сервера для наших концентраторов?


person tugberk    schedule 15.03.2012    source источник


Ответы (1)


Вот как у меня настроено:

  var hubConnection = new HubConnection("http://siteurl");
  hubConnection.Credentials = CredentialCache.DefaultNetworkCredentials;
  hubProxy = hubConnection.CreateProxy("My.Hub.Namespace");

  hubConnection.Start().Wait();

Конечно, вы можете передать другие учетные данные, я использую DefaultNetworkCredentials.

Учетные данные, возвращаемые DefaultNetworkCredentials, представляют собой учетные данные проверки подлинности для текущего контекста безопасности, в котором выполняется приложение. Для клиентского приложения это обычно учетные данные Windows (имя пользователя, пароль и домен) пользователя, запускающего приложение. Для приложений ASP.NET сетевые учетные данные по умолчанию — это учетные данные пользователя, вошедшего в систему, или пользователя, олицетворяемого.

person Andy May    schedule 15.03.2012
comment
Хорошо, это хорошо. Как вы аутентифицируете пользователя на сервере с этими учетными данными? Как SignalR справляется с этим? - person tugberk; 15.03.2012
comment
SignalR вообще не участвует в аутентификации. Он просто передает учетные данные от основного хоста. В случае приведенного выше примера вам потребуется, чтобы ваш SignalR был защищен с помощью проверки подлинности Windows, чтобы сетевые учетные данные по умолчанию могли что-либо делать. Затем вы можете авторизовать пользователя на основе собственной логики (можно ли пользователю Бобу вызывать метод хаба Foo?) - person Damian Edwards; 16.03.2012
comment
@DamianEdwards Итак, можем ли мы сказать, что создание настольного чат-приложения с аутентификацией на основе пользователя (точно так же, как Windows Live Messagner) с SignalR не является хорошей идеей (по крайней мере, на данный момент)? У вас, ребята, есть JabbR как IRC с аутентификацией форм. У вас есть образец аутентификации на рабочем столе, который я могу посмотреть и понять? - person tugberk; 03.04.2012
comment
@tugberk Я не думаю, что Дэмиан имел в виду это. Он имеет в виду, что аутентификация происходит вне signalr. Я использую проверку подлинности Windows в своем приложении Silverlight, и оно отлично работает. Вам просто нужно включить аутентификацию Windows на вашем сервере IIS (и отключить анонимность), и приведенный выше код должен работать с вызовом аутентификации 401. - person Andy May; 03.04.2012
comment
@AndyMay, спасибо, Энди! Я до сих пор не могу представить, как передать учетные данные из моего настольного приложения в IIS. Вы предлагаете мне проверить разрешения в моем настольном приложении, и если они действительны, я должен разрешить запуск SignalR? - person tugberk; 04.04.2012
comment
@AndyMay: я пытаюсь использовать проверку подлинности Windows в приложении Silverlight с signalR, но получаю ту же проблему, что и OP. Я гарантировал, что проверка подлинности Windows является единственной настройкой в ​​​​IIS, и сделал вызов webapi перед настройкой клиентской стороны signalR, поэтому я знаю, что клиент аутентифицирован. Любые другие ошибки, которые вы можете предложить, могут сбить меня с толку? - person mutex; 31.01.2014
comment
У меня была такая же ситуация, и даже я использовал DefaultNetworkCredentials, у меня это не сработало. я все еще получаю исключение unauthorized - person mhesabi; 15.10.2016