如何为Web服务器上的SignalR集线器提供控制台应用程序(本地系统)认证

时间:2018-07-03 14:26:04

标签: .net authentication signalr owin

所以我们有一个运行在Windows身份验证上的IIS,而我们的asp.net有一个基本的signalR集线器:

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }

public class DemoHub : Hub
    {
        public void SendHello(string text)
        {
            Clients.All.hello(new Random().Next() + " - " + text);
        }
    }

我们有一个简单的控制台应用程序客户端:

class Program
{
    static async Task Main(string[] args)
    {
        var url = "http://localhost/";

        var hubConnection = new HubConnection(url);
        hubConnection.Credentials = CredentialCache.DefaultCredentials;
        var hubProxy = hubConnection.CreateHubProxy("DemoHub");
        await hubConnection.Start();

        while (true) {
            Console.WriteLine("Type something!");
            var text = Console.ReadLine();
            await hubProxy.Invoke("SendHello", new [] {text});
        }
    }
}

当前,客户端使用Windows凭据CredentialCache.DefaultCredentials,但是在生产环境中这将无法正常工作,因为控制台将是运行在local system上的Windows服务,并且Web服务器将位于内部网。

在这里我有什么选择? (SSL)-证书不是一个选项。我可以使用令牌吗?是否有什么选项不需要重写IIS或整个服务器身份验证?

1 个答案:

答案 0 :(得分:0)

我使用类似的控制台应用程序监视IIS主机,并每5秒将有关各种性能计数器的更新发送到监视页面,以更新图表/图形和其他元素。

我使用Windows帐户将控制台应用程序作为计划任务运行,可以在其中输入运行该应用程序的凭据。这是用于运行服务,计划任务等的专用帐户。通常,您不会使用自己的凭据。

就作为Windows服务运行而言,这也应适用。使用对IIS主机具有适当权限的帐户,并使用这些凭据运行服务设置。