小编Sam*_*Cat的帖子

如何使用SignalR(单独的域)进行表单身份验证?

好的,所以我一直在玩SignalR一段时间.我有一个包含以下项目的VS2013解决方案:

  • 业务项目(包含自定义成员资格提供程序
  • Mvc网站(本地IIS - subdomain1.domain.ext)
  • SignalR(本地IIS - subdomain2.domain.ext)

这些在本地运行时,使用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进行身份验证?实现这一目标的最佳模式是什么?任何想法将不胜感激.

.net c# forms-authentication signalr

5
推荐指数
1
解决办法
3510
查看次数

标签 统计

.net ×1

c# ×1

forms-authentication ×1

signalr ×1