我的SignalR Hub
要求对用户进行身份验证,并且下面的行提供了我的用户ID:
var userId = Context.UserIdentifier;
类似地,我可以通过以下方式获得全部索赔:
var user = Context.User.Claims;
如果我在本地使用SignalR
,这很好用,但是如果我切换到Azure SignalR服务,则在null
中会得到一个Context.UserIdentifier
值。我也没有任何要求。
这是我在Startup.cs
中要更改的内容:
在ConfigureServices()
方法中,我使用
services.AddSignalR().AddAzureSignalR(Configuration["AzureSignalR:ConnectionString"]);
代替
services.AddSignalR();
在Configure()
方法中,我使用:
app.UseAzureSignalR(routes =>
{
routes.MapHub<Hubs.MyHub>("/chat");
});
代替:
app.UseSignalR(routes =>
{
routes.MapHub<Hubs.MyHub>("/chat");
});
Azure SignalR配置中是否还需要其他任何内容以确保获得用户的主张?知道为什么这一更改会阻止提出索赔吗?
P.S。我正在使用Azure AD B2C进行用户身份验证,正如我所说,如果我在本地使用SignalR,则一切正常,这意味着处理从JWT
抓取QueryString
令牌的代码可以正常工作。
答案 0 :(得分:0)
SignalR服务将自动从经过身份验证的用户那里继承声明,不需要特殊配置。我刚刚尝试了使用SignalR服务的Azure AD B2C示例,并且声明可以从HubCallerContext
获得。
您能否检查协商返回的SignalR访问令牌,以查看索赔是否首先从服务器返回? (从base64对其进行解码,然后您会看到声明)