【问题标题】:ASP.NET Core receive SignalR updatesASP.NET Core 接收 SignalR 更新
【发布时间】:2017-09-04 08:13:43
【问题描述】:

我知道 SignalR 不适用于 ASP.NET Core 1.1 和 2.0 的预览版。同时我需要解决这个限制。

我正在构建的应用程序是一个 ASP.NET Core 1.1 MVC 应用程序。此应用程序中一个小而重要的功能是案例管理。需要使用该特定用户的新传入案例来更新视图。

我的 SignalR 2 集线器在单独的 ASP.NET 4.* 应用程序中运行。

我希望这是一种方式,我可以轻松地使用 SignalR JavaScript 客户端而不是 .NET 客户端,而 Bob 是你的叔叔。 然而,问题是我使用 Azure AD B2C (oauth2) 的 AuthN/AuthZ

在 MVC 应用程序中,我使用标准 cookie 授权,但我用于后端 API 的模式是我使用我的 MVC 代码将访问令牌包装在不记名令牌中并将其发送到我使用的后端 API jwt 不记名授权。因此,我的客户端 JavaScript 永远不会看到访问令牌,只是 MVC 应用程序在 View 和 Controller 之间使用的 cookie。

现在的问题是,如果我想使用 JavaScript 连接到集线器,我没有任何东西可以发送到集线器来证明我的身份,因为 jwt 令牌仅存在于 MVC 主机中,并且 cookie 仅是 HTTP,因此无法访问。

有什么想法或替代方案吗?

谢谢!

【问题讨论】:

  • 在您的后端服务中,您为什么要使用身份验证。请改用带有防火墙 IP 的 http 或 https。

标签: asp.net .net asp.net-mvc signalr


【解决方案1】:

好的,我找到了!我可以使用以下方法从我的 MVC 应用程序传递 cookie:

  1. 按照https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/compatibility/cookie-sharing 中的说明设置 cookie 共享
  2. 通过 SignalR 中 hubConnection 上的 start 方法在 XMLHttpRequest.withCredentials 上使用 withCredentials=true

    conn.start({ withCredentials: true }).done(function () { hub.invoke('recordHit'); });

  3. 在 Hub 项目中设置 CORS。

简单!像魅力一样工作

【讨论】:

    猜你喜欢
    • 2021-01-09
    • 2019-06-15
    • 2018-12-07
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多