在 OWIN 托管的 SignalR 实现中接受 ASP.NET 表单身份验证 cookie?

Posted

技术标签:

【中文标题】在 OWIN 托管的 SignalR 实现中接受 ASP.NET 表单身份验证 cookie?【英文标题】:Accepting ASP.NET Forms Authentication cookies in an OWIN-hosted SignalR implementation? 【发布时间】:2013-06-29 14:10:37 【问题描述】:

我有一个使用 OWIN 的自托管 SignalR 实例。我想实施授权。我的用户已经使用表单身份验证登录到 ASP.NET MVC 应用程序。

由于这两个应用程序将在同一个 URL 上可用,因此 cookie 将在两者之间共享。如何在自托管 SignalR 应用程序中接受表单身份验证 cookie?

澄清:我说的是浏览器访问自托管 SignalR 集线器,使用的凭据用于登录单独的(但相关的,并安装在同一主机上)IIS 应用程序。

所以,问题是:如何连接到 SignalR 服务器管道以捕获 .ASPXAUTH cookie 并在调用集线器之前使用它来设置当前主体?

如果有帮助,我可以加入一些 Nancy。

【问题讨论】:

您找到解决问题的方法了吗?我正在尝试相同的方法(尽管我的 MVC 应用程序和我的自托管 SignalR 服务位于不同的端口上)。 【参考方案1】:

如果您的用户已经通过身份验证并登录,您可以在 SignalR 中心检查以下内容:

Context.User.Identity.IsAuthenticated

确保此属性设置为 true。您可以将此检查放置在集线器的构造函数中以阻止/删除它们的连接。如果为 false,您可以将它们重定向到另一个页面。

【讨论】:

身份验证发生在 MVC 应用程序中,而不是在服务中。 .ASPXAUTH cookie 可以在两者中使用,但我如何将其连接到 SignalR 或 OWIN 管道中? 罗杰,我知道你在寻找什么,但实际上从未尝试过这样做。对于连接类,有一个名为“CookieContainer”的属性。这可以在Microsoft.AspNet.SignalR.Client.Connection 中找到,您可以在其中获取/设置它。在其中,您可以利用此answer 中的代码来尝试添加它。

以上是关于在 OWIN 托管的 SignalR 实现中接受 ASP.NET 表单身份验证 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

OWIN 自托管静态网站

支持 https 的 Owin 自托管控制台应用程序(无 Web api,无 SignalR)

SignalR.Owin 与 SignalR.SelfHost

如何使用Owin和Web Api 2在SignalR上配置MessagePack?

使用 OWIN 的 ASP.NET WebApi 的有效 WebSockets 实现是啥? (不能是 SignalR。)

OWIN 的这些用法可能吗?