【发布时间】:2014-03-18 06:41:56
【问题描述】:
好的,所以我玩 SignalR 已经有一段时间了。我有一个包含以下项目的 VS2013 解决方案:
- 业务项目(包含自定义成员资格提供程序的类库)
- Mvc 网站(本地 IIS - subdomain1.domain.ext)
- SignalR(本地 IIS - subdomain2.domain.ext)
目前这些在本地运行,域是使用主机文件转发的。它们在不同的域上运行,因为我希望 SignalR 与任何其他项目完全分开运行(因为某些桌面软件也可以访问它,并且可能是 iOS 应用程序)。
在 Mvc 网站中,一个小留言板正在运行。包括留言板在内的整个网站都在表单身份验证后面。我通过 SignalR 检索电路板的所有消息,使用 Javascript 在自定义 MessageHub 上调用 GetMessages 函数:
$(function () {
// Declare a proxy to reference the hub.
var signalrUrl = SignalrBaseUrl + '/signalr';
var messageList = $('#messageList');
var messenger = $.connection.messengerHub;
messenger.client.addMessage = function (message) {
addMessageToList(message);
};
function init() {
messenger.server.getAllMessages().done(function (messages) {
messageList.empty();
addMessagesToList(messages);
})
}
[...]
// Start the connection.
$.connection.hub.url = signalrUrl;
$.connection.hub.logging = SignalrLogging;
$.connection.hub.start().done(init);
})
我只希望经过身份验证的用户能够访问集线器,以及所有集线器。我知道设置 Authorize 属性(或通过配置强制对所有集线器进行身份验证),我的问题是关于身份验证部分。
那么如何正确完成身份验证?我相信只要我们在不同的域上共享 cookie 就不会起作用(有人可以确认吗?)。为此,我需要以某种方式使用 Mvc 网站中创建的 Cookie(我猜?)来使用,但我不知道如何将其发送到 SignalR 以及将其与什么进行比较?或者将用户名和密码发送到 SignalR 并在那里针对业务层中的成员资格提供者进行身份验证?实现这一目标的最佳模式是什么?任何想法将不胜感激。
【问题讨论】:
标签: c# .net forms-authentication signalr