【发布时间】:2021-05-09 01:24:22
【问题描述】:
我使用 Bearer 令牌向 Signalr 进行了身份验证,并且 Signalr 说身份验证是 成功。
但 Signalr Hub Context.Identity.User.Name 在身份验证后为空。
如何在 SignalR Hub 中访问经过身份验证的用户信息以进行连接 ID 和用户映射。
我的 Startup.cs 代码用于身份验证。
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.Authority = "https://security.minima.local";
options.Audience = "blazor_web_app_api";
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new
TokenValidationParameters()
{
ValidateAudience = false
};
options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var accessToken = context.Request.Query["access_token"];
var path = context.HttpContext.Request.Path;
if (!string.IsNullOrEmpty(accessToken) &&
(path.StartsWithSegments("/notification")))
{
context.Token = accessToken;
}
return Task.CompletedTask;
}
};
})
.AddIdentityServerJwt();
【问题讨论】:
-
您知道您的令牌包含
Name声明吗?此外,默认情况下,SignalR 对用户使用NameIdentifier声明,但您可以自定义 docs.microsoft.com/aspnet/core/signalr/… -
事实上所有声明都是空的(电子邮件等),但只有 NameIdentifier 不是空的。我如何使用 NameIdentifier 提出其他声明?
标签: asp.net-core jwt signalr identityserver4 bearer-token