SIgnalR v2 RC1 CORS 请求没有使用 SignalR v2 RC1 的 cookie



Using SignalR V2 RC1我有一个 SignalR 自承载控制台应用程序,该应用程序允许位于绑定到 http://*:8080 的 Server1 上的 CORS 连接。

在Server2上,我有一个使用Windows身份验证的MVC 4内部网网站。

当用户首次通过Server3上的浏览器访问默认页面时,MVC控制器会分配一个cookie。我希望此 cookie 从浏览器传递到 Server1 上的 SignalR 应用程序。

当通过VS2012

在本地执行此操作时,我可以清楚地看到cookie在浏览器中设置,随后在每个连接上传递给自托管应用程序(在VS2012的另一个实例中运行)。

在上述服务器上完成时,Cookie 不再与 SignalR 请求一起发送。

这个问题似乎不是IE9特有的(我知道IE9在根据SignalR IE9跨域请求通过CORS连接传递cookie时存在问题,不起作用),因为我也尝试过这个与Firefox相同的结果。

我从 https://github.com/SignalR/SignalR/issues/1735 那里得到的印象是,有关 CORS 和 cookie 的问题已针对 SignalR v2 RC1 得到解决。那么我做错了什么?

我已经通过将 cookie 详细信息放入查询字符串中来引入解决方法,但我宁愿通过跨域传递 cookie 来使其正常工作。

为了完整起见,SignalR 自托管应用程序配置如下,尽管我猜这真的与客户端在发送 cookie 方面发生的事情无关

public class StartupSignalR
 {
        public void Configuration(IAppBuilder app)
        {
            app.Map("/signalr", map =>
            {
                map.UseCors(CorsOptions.AllowAll);
                var hubConfiguration = new HubConfiguration
                {
                    EnableJSONP = true
                };
                map.RunSignalR(hubConfiguration);
            });
        }
 }

客户端js如下

<script src="Scripts/jquery-1.8.2.min.js"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.0.0-rc1.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="http://10.144.20.150:8080/signalr/hubs"></script>
<!--Add script to update the page and send messages.-->
<script src="Scripts/jquery.cookie.js"></script>
<script type="text/javascript">
$(function () {
    //Set the hubs URL for the connection
    $.connection.hub.url = "http://10.144.20.150:8080/signalr";
    $.connection.hub.qs = { 'Token': $.cookie("Token") };
    // Declare a proxy to reference the hub.
    var chat = $.connection.myHub;
    // Create a function that the hub can call to broadcast messages.
    chat.client.addMessage = function (name, message) {
        // Html encode display name and message.
        var encodedName = $('<div />').text(name).html();
        var encodedMsg = $('<div />').text(message).html();
        // Add the message to the page.
        $('#discussion').append('<li><strong>' + encodedName
            + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
    };
    // Get the user name and store it to prepend to messages.
    $('#displayname').val(prompt('Enter your name:', ''));
    // Set initial focus to message input box.
    $('#message').focus();
    // Start the connection.
    $.connection.hub.start({withCredentials:true}).done(function () {
        $('#sendmessage').click(function () {
            // Call the Send method on the hub.
            chat.server.send($('#displayname').val(), $('#message').val());
            // Clear text box and reset focus for next comment.
            $('#message').val('').focus();
        });
    });
});

Cookie 与最初返回它们的域相关联。浏览器不会在 server2.com 请求中发送来自 server1.com 的cookie,即使当前提供的页面来自 server1.com。这就是饼干的工作方式。将信息放在查询字符串中是正确的方法。

相关内容

  • 没有找到相关文章