如何通过Azure WebPubSubServiceClient.GetClientAccessUri分配所有群组权限?
为Azure WebPubSub客户端授予所有群组权限的解决方案
使用Azure.Messaging.WebPubSub.Clients SDK创建Azure WebPubSub服务客户端的基础代码如下:
var serviceClient = new WebPubSubServiceClient("<connectionstring>", "hubName");
通过该客户端生成临时令牌以初始化WebSocket客户端的示例:
var url = client.GetClientAccessUri(roles: new string[] { $"webpubsub.sendToGroup.mygroup", $"webpubsub.joinLeaveGroup.mygroup" }).AbsoluteUri; var wsClient = new WebPubSubClient(new Uri(url));
上述代码初始化的客户端仅拥有操作"mygroup"群组的权限,可正常执行如下操作:
wsClient.GroupMessageReceived += eventArgs => { Console.WriteLine($"Receive group message from {eventArgs.Message.Group}: {eventArgs.Message.Data}"); return Task.CompletedTask; }; await wsClient.StartAsync(); await wsClient.JoinGroupAsync("mygroup");
若要为客户端授予当前hub内所有群组的操作权限,你尝试的两种方式均不符合Azure WebPubSub的权限规则,正确的做法是使用不带群组后缀的角色名称:
var url = client.GetClientAccessUri(roles: new string[] { "webpubsub.sendToGroup", "webpubsub.joinLeaveGroup" }).AbsoluteUri; var wsClient = new WebPubSubClient(new Uri(url));
webpubsub.sendToGroup角色允许客户端向当前hub下的任意群组发送消息,webpubsub.joinLeaveGroup角色允许客户端加入/退出当前hub下的任意群组,这样初始化后的客户端就拥有了所有群组的操作权限。
内容的提问来源于stack exchange,提问作者Karl
相关产品推荐
相关产品推荐

