.net - 如何为网络服务器上的 signalR 集线器提供控制台应用程序(本地系统)身份验证
问题描述
所以我们有一个在 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
,但在生产环境中这将不起作用,因为控制台将是运行在其上的 Windows 服务,local system
而 Web 服务器将位于 Intranet 中的计算机上。
我在这里有什么选择?不幸的是,(SSL)-证书不是一种选择。我可以使用令牌吗?有没有我们不必重写 IIS 或整个服务器身份验证的选项?
解决方案
我使用一个类似的控制台应用程序来监视我的 IIS 主机,并每 5 秒将有关各种性能计数器的更新发送到监视页面以更新图表/图形和其他元素。
我使用 Windows 帐户将控制台应用程序作为计划任务运行,我可以在其中输入它应该运行的凭据。这是用于运行服务、计划任务等的专用帐户……因为您通常不会使用自己的凭据。
就作为 Windows 服务运行而言,这也应该适用。使用在 IIS 主机上具有适当权限的帐户,并使用这些凭据运行服务设置。
推荐阅读
- javascript - 使用 Web.config 中的选项填充 HTML 选择
- javascript - 如何删除单元格中的按钮并将其替换为文本/数字?
- python - 获取 JSON 数据的特定值
- python - 使用分隔符列出的列
- c++ - 如何在c ++中的给定索引处插入列表中的项目
- mysql - 一个获取嵌套结果的 MySQL 查询?
- python - pandas 根据重复的索引数据框创建多个数据框
- javascript - 更改对象数组中的布尔值
- wordpress - 如何在 wordpress 自定义页面上获取产品类别的所见即所得自定义字段 (ACF) 的值
- mapbox - 如何使用 API 创建公共风格?