使用.NET Core2.1& VS2017预览版2,我创建了一个简单的web服务器,使用here解释的"Identity as UI“,然后在this后面添加了一个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核心控制台应用程序聊天客户端:
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,从HttpClient中获取cookie,然后在对.WithUrl的调用中提供它,如下所示:
var loginCookie = /*获取cookie */ var hubConnection = new HubConnectionBuilder() .WithUrl("http://localhost:5000/hubs/myhub",options => { options.Cookies.Add(loginCookie);}) .Build();
我现在悬赏这个问题,希望得到一个解决方案,展示如何使用“身份即UI”的.NET Core2.1 web应用程序SignalR服务器对.NET Core2.1 web控制台客户端进行身份验证。我需要从服务器获取cookie,然后将其添加到SignalR HubConnectionBuilder (现在有一个WithCookie方法)。
请注意,我不是在寻找像IdentityServer这样的第三方解决方案,谢谢!
https://stackoverflow.com/questions/50752724
复制相似问题