Используя .NET Core 2.1 и VS2017 preview 2, я создал простой веб-сервер с «Identity as UI», как описано здесь, а затем добавил чат SignalR после это.
В частности, у меня есть:
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();
Теперь я назначил награду за этот вопрос, надеясь получить решение, показывающее, как аутентифицировать клиент консоли .NET Core 2.1 SignalR с сервером SignalR веб-приложения .NET Core 2.1, который использует «Identity as UI». Мне нужно получить файл cookie с сервера, а затем добавить его в SignalR HubConnectionBuilder (у которого теперь есть метод WithCookie).
Обратите внимание, что я не ищу сторонние решения, такие как IdentityServer. Спасибо!