【发布时间】:2019-02-20 04:24:03
【问题描述】:
我的 SignalR 应用有两个客户端:用于 Web 浏览器的 Javascript 客户端和使用 JWT 不记名身份验证的 Android 客户端 (Gurgen/SignalR-.net-core-android-client)。
我将此属性添加到我的 SignalR Hub:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme + "," + CookieAuthenticationDefaults.AuthenticationScheme)]
public class MyHub : Hub
还有我的 Startup.cs 文件:
public void ConfigureServices(IServiceCollection services)
{
//…
services.AddAuthentication()
.AddCookie(cfg => cfg.SlidingExpiration = true)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidIssuer = Configuration["Tokens:Issuer"],
ValidAudience = Configuration["Tokens:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"]))
};
});
services.AddSignalR();
//…
Android 客户端使用标头身份验证承载令牌成功登录。 但是网络客户端连接到集线器失败(401 Unauthorized)。
当我删除 [Authorize] 属性时,javascript 客户端工作!
什么是默认的 Javascript SignalR 客户端身份验证方案?或者我的问题是什么?
我使用 dotnet core 2.1、Microsoft.AspNetCore.SignalR,我的 IDE 是 Visual Studio for Mac。
【问题讨论】:
-
您的 JavaScript 客户端连接构建器是什么样的?你是通过提供者还是查询字符串传递令牌?