切换到Azure SignalR服务后Context.UserIdentifier为null

时间:2018-07-21 18:00:27

标签: azure signalr

我的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令牌的代码可以正常工作。

1 个答案:

答案 0 :(得分:0)

SignalR服务将自动从经过身份验证的用户那里继承声明,不需要特殊配置。我刚刚尝试了使用SignalR服务的Azure AD B2C示例,并且声明可以从HubCallerContext获得。

您能否检查协商返回的SignalR访问令牌,以查看索赔是否首先从服务器返回? (从base64对其进行解码,然后您会看到声明)