首页 > 解决方案 > 切换到 Azure SignalR 服务后,Context.UserIdentifier 为 null

问题描述

我的 SignalRHub要求对用户进行身份验证,以下行给了我用户的 ID:

var userId = Context.UserIdentifier;

同样,我可以通过以下方式获得整套声明:

var user = Context.User.Claims;

如果我在本地使用,这很好SignalR,但如果我切换到 Azure SignalR 服务,我会nullContext.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 配置中的其他任何内容来确保我获得用户的声明?知道为什么这一变化会阻止索赔通过吗?

PS 我正在使用 Azure AD B2C 进行用户身份验证,正如我所说,如果我在本地使用 SignalR,一切正常,这意味着处理从中获取JWT令牌的代码QueryString工作正常。

标签: azuresignalr

解决方案


SignalR 服务将自动从您经过身份验证的用户那里继承声明,无需特殊配置。我刚刚尝试了带有 SignalR 服务的 Azure AD B2C 示例,声明可以从HubCallerContext.

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


推荐阅读