Использование .NET Core 2.1 и VS2017 preview 2 Я создал простой веб-сервер с «Identity as UI», как объяснено здесь , а затем добавил чат SignalR после this .
В частности, у меня есть:
app.UseAuthentication();
app.UseSignalR((options) => {
options.MapHub<MyHub>("/hubs/myhub");
});
..
[Authorize]
public class MyHub : Hub
..
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:5000",
"sslPort": 0
Я запускаю отладчик, который открывает браузер, регистрирует пользователя и входит в систему, затем перехожу на http://localhost:5000/SignalRtest (моя страница бритвы, котораяиспользует signalr.js) и убедитесь, что чат работает нормально.
Я сейчас пытаюсь создать клиент для чата в приложении консоли .NET Core:
class Program
{
public static async Task SetupSignalRHubAsync()
{
var hubConnection = new HubConnectionBuilder()
.WithUrl("http://localhost:5000/hubs/myhub")
.Build();
await hubConnection.StartAsync();
await hubConnection.SendAsync("Send", "consoleapp");
}
public static void Main(string[] args)
{
SetupSignalRHubAsync().Wait();
}
}
Моя проблема в том, что я не знаю какаутентифицировать этого клиента?
РЕДАКТИРОВАТЬ:
(с https://github.com/aspnet/SignalR/issues/2455)
"Причина, по которой он работает в браузере, заключается в том, что в браузере есть Cookie с моментаВы вошли в систему, поэтому он отправляет его автоматически, когда SignalR делает свои запросы. Чтобы сделать что-то подобное в .NET-клиенте, вам нужно будет вызвать REST API на вашем сервере, который может установить cookie, выкопать cookie из HttpClient и затемукажите это в вызове .WithUrl, вот так:
var loginCookie = /* get the cookie */
var hubConnection = new HubConnectionBuilder()
.WithUrl("http://localhost:5000/hubs/myhub", options => {
options.Cookies.Add(loginCookie);
})
.Build();
Теперь я вознаграждаю за этот вопрос, надеясь получить решение, показывающее, как аутентифицировать консольный клиент SignalR .NET Core 2.1.с сервером SignalR веб-приложения .NET Core 2.1, которыйиспользует «Идентичность как пользовательский интерфейс».Мне нужно получить cookie-файл с сервера, а затем добавить его в SignalR HubConnectionBuilder (который теперь имеет метод WithCookie).
Обратите внимание, что я не ищу сторонние решения, такие как IdentityServer. Спасибо!