好的,所以我一直在玩SignalR一段时间.我有一个包含以下项目的VS2013解决方案:
这些在本地运行时,使用hosts文件转发域.它们运行在不同的域上,因为我希望SignalR与任何其他项目完全分开运行(因为它也可以通过某些桌面软件,也可能是iOS应用程序访问).
在Mvc网站上,正在运行一个小留言板.包括留言板在内的整个网站都是表格身份验证的背后.我通过SignalR检索电路板的所有消息,使用Javascript调用GetMessages自定义函数MessageHub:
$(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);
})
Run Code Online (Sandbox Code Playgroud)
我希望只有经过身份验证的用户才能访问集线器以及所有集线器.我知道设置Authorize属性(或通过配置强制对所有集线器进行身份验证),我的问题是关于身份验证部分.
那么认证如何正确完成?我相信只要我们在不同的域上(有人可以确认吗?),共享cookie就无法运行.为此,我需要以某种方式使用Mvc网站中创建的Cookie(我猜?)来使用,但我不知道如何将它发送到SignalR以及将它与之比较?或者将用户名和密码发送到SignalR并在那里对businesslayer中的Membership provider进行身份验证?实现这一目标的最佳模式是什么?任何想法将不胜感激.