c# - 有没有办法对连接到 Azure SignalR 的用户进行身份验证?
问题描述
我真的很难理解如何实现这一点。我正在运行 Azure SignalR 服务。我有一个 Azure 函数设置。我有一个 Web API。
Web API 向 Azure 函数触发 HTTP POST,然后使用 HTTPTrigger 向连接到 Azure SignalR 服务的所有用户发送(广播)。伟大的!
现在我有一个问题,对于每个 HTTP POST,Web API 必须只向特定用户发送消息。显然,当用户使用 Azure SignalR 连接(或“协商”)时,他们需要以某种方式进行身份验证。
说实话,当我有一个自托管的 SignalR 应用程序时,我知道如何对用户进行身份验证。每当用户连接到 SignalR 集线器时,先使用不记名令牌身份验证完成此操作。但是,那是自托管的 SignalR。我现在使用托管在 Azure 上的 Azure SignalR。
另外我需要说的是,Azure SignalR 的客户端监听的 Negotatiate 和所有方法都是 Azure Functions。
[FunctionName("negotiate")]
public static SignalRConnectionInfo Negotiate(
[HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequest req,
[SignalRConnectionInfo
(HubName = "notifications")] //, UserId = "{headers.x-ms-client-principal-id}"
SignalRConnectionInfo connectionInfo)
{
// connectionInfo contains an access key token with a name identifier claim set to the authenticated user
return connectionInfo;
}
[FunctionName("PlacedOrderNotification")]
public static async Task Placed(
[QueueTrigger("new-order-notifications")] OrderPlacement orderPlacement,
[SignalR(HubName = "notifications")] IAsyncCollector<SignalRMessage> signalRMessages,
ILogger log)
{
log.LogInformation($"Sending notification for {orderPlacement.CustomerName}");
await signalRMessages.AddAsync(
new SignalRMessage
{
Target = "productOrdered",
Arguments = new[] { orderPlacement }
});
}
我想以某种方式将我的不记名令牌身份验证并放置在 Azure SignalR 中。
现在是百万美元的问题……我到底该怎么做呢?我可以重新使用用于自托管 SignalR 服务的承载身份验证代码并以某种方式将其集成到我的架构中吗?
解决方案
正常的使用过程应该是下面描述的场景。
Web API 向 Azure 函数触发 HTTP POST,然后使用 HTTPTrigger 向连接到 Azure SignalR 服务的所有用户发送(广播)。伟大的!
根据您的描述,Web API 发送一个正文包含 json 数据的帖子,例如:
{
"orderid": "0001",
"status" : "created",
"userid" : "Jason",
......
}
然后你function app
需要处理这个订单信息,找出谁需要推送才能收到这个消息。
建议,你可以将signlar与function app集成。
根据业务信息和需求,将订单信息推送给指定用户。
推荐阅读
- node.js - 如何避免在 express node.js 中捕获冗余
- swift - 如何从 xcode 项目中完全删除核心数据类?
- javascript - .style.color 不会改变 JavaScript 中元素的颜色
- flutter - Flutter / Dart:在三元的 Else 子句之后使用扩展运算符的问题
- c++ - 'bits/cpp_type_traits.h' 文件未找到
- django - 让用户设置一个可用于所有视图的变量的最佳做法是什么?
- kubernetes - Yaml 文件中的语法错误 - 流集合条目之间缺少逗号
- python - 一个变量在for循环之后是相同的,在另一个for循环中是不同的
- windows - Windows 的 Powershell 不发送和接收包
- java - 如何访问 SearchComponent 子类中的字段分析器?